Пусть системное время определяет скорость анимации, а не программа FPS - PullRequest
2 голосов
/ 26 марта 2010

Я пишу карточную игру в ActionScript 3. Каждая карточка представлена ​​экземпляром класса, расширяющим мувиклип, экспортированный из Flash CS4, который содержит графику карточки и анимацию переворота. Когда я хочу перевернуть карту, я вызываю gotoAndPlay для этого мувиклипа.

Когда частота кадров замедляется, все анимации дольше заканчиваются. Похоже, что Flash по умолчанию анимирует видеоклипы таким образом, что все кадры в клипе будут прорисованы. Поэтому, когда частота кадров программы опускается ниже частоты кадров клипа, анимация будет воспроизводиться в более медленном темпе.

Я бы хотел, чтобы анимация всегда воспроизводилась с одинаковой скоростью и, как следствие, всегда отображалась на экране в течение одинакового промежутка времени. Если частота кадров слишком мала, чтобы показать все кадры, кадры отбрасываются. Можно ли сказать Flash, чтобы анимировать таким образом? Если нет, то как проще всего запрограммировать это поведение самостоятельно?

Ответы [ 3 ]

1 голос
/ 26 марта 2010

Самый простой способ - использовать Timer (или setInterval), запускающий каждые 1000 миллисекунд / кадр / с, сообщая вашему MovieClip перейти к следующему кадру.

Если вам нужно что-то более точное, вам придется проверить время, проведенное с момента последнего обновления (украдено из первого комментария этой статьи из блога Кейта Питерса , что все очень хорошо объясняет).

0 голосов
/ 01 декабря 2010

Класс подростков (fl.transitions.Tween) идеально подходит для этой ситуации. Устанавливая последний аргумент конструктора равным TRUE, он основывает свои анимации / триггеры за секунды, и, насколько я знаю, он компенсирует потерю / усиление FPS.

Вы можете легко использовать его как класс Timer, передав новый объект (Trigger(new Object(), "x") в конструктор и создав прослушиватель для MOTION_FINISH (TweenEvent.MOTION_FINISH) для запуска вашего события!

Я использую Tweens для МНОГО вещей, потому что они легки, быстры и поддерживаются всем. И, как я уже сказал, он должен решить ваши проблемы с FPS / лагом, поскольку он адаптируется к изменениям FPS в режиме реального времени (насколько я знаю!).

0 голосов
/ 26 марта 2010

Прошло много времени с тех пор, как я использовал Flash, но насколько я понимаю, это невозможно, поскольку Flash использует модель анимации на основе кадров.

Однако Silverlight использует модель анимации на основе времени и просто нарисует столько промежуточных кадров, сколько позволяет частота кадров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...