2010-03-26 2 views
2

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

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

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

ответ

0

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

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

1

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

Если вам нужно что-то более точное, вы должны будете проверки времени, затрачиваемого с момента последнего обновления (украденной из первого комментария из this article from Keith Peters' blog, что объясняет все довольно хорошо).

0

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

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

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

Смежные вопросы