Comments 12
Подход с хранимым значением currentValue — костыль. При достаточно большом количестве промежуточных кадров и при каждом инкременте будет накапливаться ошибка. Поэтому твинер должен рассчитывать значение параметра каждый раз через интерполятор как функцию от процента завершенности анимации. Это сразу решает все проблемы и убирает подобные костыли.
Согласен, что у автора в данном случае получился костыль, т.к. мы знаем конец и начало.
Но мне интересно, а как быть без этого костыля (без отдельного хранения координаты), когда мы не знаем конца анимации? Например движение шарика, которым управляет игрок.
Но мне интересно, а как быть без этого костыля (без отдельного хранения координаты), когда мы не знаем конца анимации? Например движение шарика, которым управляет игрок.
Есть такая парадигма, что данные от представления хранятся отдельно. То есть координаты объекта храниться будут не в Sprite а в отдельной переменной. И все расчеты будут вестись с этой переменной, а при обновлении кадра Sprite просто будет брать значение из переменной.
>> Любой DisplayObject, даже не добавленный в DisplayList исправно получает событие входа на кадр.
Разумется получает! Что значит «недокументированная особенность»? Нигде и не было сказано, что это событие не получают не добавленные в дисплейлист объекты. Я, честно говоря, удивляюсь, как можно было писать что-то на as3 и не знать этой «особенности».
Вот цитата из документации:
«Dispatched when the playhead is entering a new frame. If the playhead is not moving, or if there is only one frame, this event is dispatched continuously in conjunction with the frame rate. This event is a broadcast event, which means that it is dispatched by all display objects with a listener registered for this event.»
Разумется получает! Что значит «недокументированная особенность»? Нигде и не было сказано, что это событие не получают не добавленные в дисплейлист объекты. Я, честно говоря, удивляюсь, как можно было писать что-то на as3 и не знать этой «особенности».
Вот цитата из документации:
«Dispatched when the playhead is entering a new frame. If the playhead is not moving, or if there is only one frame, this event is dispatched continuously in conjunction with the frame rate. This event is a broadcast event, which means that it is dispatched by all display objects with a listener registered for this event.»
Да уж, что возьмешь с флеш-программистов :) очевидно, что параметры объекта надо не инкрементить, а вычислять по формуле value = initial_value + change_speed * (time — start_time). Я не знаю, насколько во флеше гарантируется стабильность частоты вызова ENTER_FRAME, возможно, надо брать время, возможно, достаточно брать номер текущего кадра.
Но, конечно, сокруглением до 0.05, флеш выкидывает интересные коленца.
Но, конечно, сокруглением до 0.05, флеш выкидывает интересные коленца.
UFO just landed and posted this here
-Доктор когда я делаю ТАК, у меня там что-то щелкает.
-А вы не делайте ТАК.
-Как же не делать? Оно же щелкает!
-А вы не делайте ТАК.
-Как же не делать? Оно же щелкает!
Флеш не гарантирует 100% точность частоты вызовов ENTER_FRAME, метод изначально не правильный.
Сократил статью.
Sign up to leave a comment.
Математика флешевого Number при твининге DisplayObject