Pull to refresh

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.»
Случайно обрезал самую важную часть:
«Note: This event has neither a „capture phase“ nor a „bubble phase“, which means that event listeners must be added directly to any potential targets, whether the target is on the display list or not
Да уж, что возьмешь с флеш-программистов :) очевидно, что параметры объекта надо не инкрементить, а вычислять по формуле value = initial_value + change_speed * (time — start_time). Я не знаю, насколько во флеше гарантируется стабильность частоты вызова ENTER_FRAME, возможно, надо брать время, возможно, достаточно брать номер текущего кадра.

Но, конечно, сокруглением до 0.05, флеш выкидывает интересные коленца.

UFO just landed and posted this here
-Доктор когда я делаю ТАК, у меня там что-то щелкает.
-А вы не делайте ТАК.
-Как же не делать? Оно же щелкает!
Флеш не гарантирует 100% точность частоты вызовов ENTER_FRAME, метод изначально не правильный.
Верно. Именно поэтому для критичных перемещений используется коррекция ENTER_FRAME эвента по таймеру.
Sign up to leave a comment.

Articles