Лучший способ отсчитывать время событий в играх

Ранее я задавал вопрос об AS3 и времени для игр, но не получил ответа, поэтому попытался уточнить вопрос.

Я делаю игру, похожую по стилю на Touhou, чтобы изучить AS3, но эта игра приурочена к музыке. Шаблоны пуль, появление врагов и особая графика будут приурочены к определенному времени в музыке. Что мне интересно:

Каков наилучший способ точного определения времени многих (!) событий, которые должны быть очень точными и не смещаться даже в незначительной степени?

Пример того, какой тайминг я ищу: s Создайте 5 разных типов врагов в 1:30 минуты, пуля врага 1 начнется в 1:31, пуля будет рассчитана на удар, поэтому повторяйте паттерн каждые 2 секунды. Это простой и краткий пример того, чего я пытаюсь достичь.


person Babyrat    schedule 12.08.2011    source источник


Ответы (1)


Для времени объекта и анимации вы должны прослушать событие ENTER_FRAME, а затем получить текущее время в миллисекундах с помощью:

var now:Date = new Date();
var timeInMilis:int = now.getTime();

и проверьте, нужно ли перемещать, добавлять и т. д. какие-либо объекты в зависимости от этого времени.

Что касается синхронизации звука, вы, вероятно, будете в порядке, просто воспроизводя звуки во время события ENTER_FRAME. Но flash склонен к добавлению задержки к звукам, а это означает, что они не всегда будут воспроизводиться сразу после того, как вы вызовете для них .play() (не слишком много, порядка миллисекунд). Если вам нужна сверхточная синхронизация, вам может понадобиться реализовать собственный микшер, используя методы, описанные здесь и здесь.

Удачи!

person kolufild    schedule 12.08.2011
comment
Это работает, большое спасибо. Но теперь у меня проблема с контролем моей временной шкалы. То, как я собирался это сделать, заключалось в том, чтобы сделать переключатель, который при достижении определенного случая (случаи - это конкретная секунда) запускает дело примерно 30 раз, прежде чем уйти, когда я хочу, чтобы он запускался только один раз. Есть ли способ обойти это? Или есть другие способы сделать временную шкалу? - person Babyrat; 13.08.2011
comment
Пометьте дело как «инициированное» или что-то в этом роде после его запуска, чтобы вы знали, какие из них пропустить. - person kolufild; 13.08.2011