Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   минимальный шаг изменения числа в ENTER_FRAME (http://www.flasher.ru/forum/showthread.php?t=210062)

a7s1h1 21.01.2015 17:50

минимальный шаг изменения числа в ENTER_FRAME
 
Извините, модераторы, если коряво сформулировал тему.
Вопрос у меня такой: в ENTER-FRAME я постепенно увеличиваю прозрачность объекта (т.е. опускаю alpha с 1 до 0 вот так:
Код AS3:

alpha -= .0001

). После того, как он становится совсем невидимым, я его уничтожаю.
В какой-то момент мне захотелось, чтобы объект "таял" медленней. Я просто добавил нолик, в расчёте на то, что теперь таяние замедлится в 10 раз:
Код AS3:

alpha -= .00001

. Но не тут-то было! Ничего не поменялось. Проверка alpha в trace показала следующее:
Код AS3:

0.99609375
0.9921875
0.98828125
0.984375

Т.е., шаг изменения, грубо говоря, .004 (точнее 0,00390625) вместо указанных мной .0001. Это что же, получается, что это минимальный шаг изменения alpha? Можно ли как-то уменьшить этот шаг, не меняя fps?

illuzor 21.01.2015 18:05

Не проще ли в вашем случае использовать твинер?

a7s1h1 21.01.2015 18:13

Цитата:

Сообщение от illuzor (Сообщение 1177850)
Не проще ли в вашем случае использовать твинер?

не пробовал, но я так понимаю, для этого надо твинер создавать, потом удалять... А тут, без всякой мороки, вместе с десятками других операций в шаге я одной крохотной строчкой меняю родной параметр спрайта. Другое дело, если твинер - это единственный способ сделать "таяние" медленней... В этом случае буду признателен за общее описание того, как в данном случае это можно реализовать

illuzor 21.01.2015 18:19

Всё наоборот. При использовании твинера можно заанимировать ваше исчезание одной строкой кода.
http://greensock.com/gsap-as

a7s1h1 21.01.2015 18:42

Но ведь для этого надо использовать целый дополнительный класс. К тому же, то, что по вашей ссылке - это разве бесплатно? Не думаю, что из-за такой мелочи стоит заморачиваться с твинером. Проблему можно оставить нерешённой - фиг с ним, пусть тает быстро, но всё же интересно, что влияет на ограничение минимальной величины изменения alpha в шаге? Это особенность AS3 такая? (Кстати, проверил с разными значениями fps (12,30,60) - разницы никакой: везде при alpha-=.0001 и менее в коде за шаг изменение всё равно 0,0039)

nubideus 21.01.2015 19:22

a7s1h1, флеш плеер округляет многие значения экранных объектов.

используй дополнительную переменную.
var _alpha:Number = alpha;
...
_alpha += 0.00001;
alpha = _alpha;

скорее не округляет а использует float, но я хз не факт

olexandr 21.01.2015 20:03

Зря вы так о твинерах. TweenMax имеет бесплатные и платные версии. Но конкурентов у него более чем предостаточно. Я предпочитаю Caurina Tweener. Вы один раз вникните в то, как ими пользоваться и потом сами будете удивляться своей боязни "целого дополнительного класса". :)

ZackMercury 21.01.2015 20:07

Цитата:

Сообщение от olexandr (Сообщение 1177858)
Зря вы так о твинерах. TweenMax имеет бесплатные и платные версии. Но конкурентов у него более чем предостаточно. Я предпочитаю Caurina Tweener. Вы один раз вникните в то, как ими пользоваться и потом сами будете удивляться своей боязни "целого дополнительного класса". :)

Лучше будет, если человек сначала разберётся, почему не получается реализовать без твиннера, и как решить проблему своими силами.

expl 21.01.2015 21:17

Код AS3:

скорее не округляет а использует float, но я хз не факт

Поля DisplayObject-ов(x, y, alpha, rotation, ...) имеют точность точно меньше чем Number - факт
Поэтому да, все промежуточные результаты расчетов надо хранить в дополнительных полях Number

caseyryan 22.01.2015 09:19

Альфа хранится в 8-битном канале, и то, что вы указываете, сначала конвертируется в int, а для получения обратно из int во float.
Более подробно вот тут написано http://stackoverflow.com/questions/1...ults-in-the-al
Поэтому ни о какой подобной точности можно даже не мечтать в данном случае
Цитата:

Поэтому да, все промежуточные результаты расчетов надо хранить в дополнительных полях Number
Что-то мне подсказывает, что это здесь не поможет. Числа то храниться будут, но на альфу это скорее всего не подействует


Часовой пояс GMT +4, время: 15:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.