Есть ли способ пропустить рамки рисования?

#flash #actionscript-2

#flash #actionscript-2

Вопрос:

Я создаю флеш-игру, которая использует временные интервалы с setInterval и иногда выполняет сложные вычисления. Проблема в том, что на более медленных машинах эти вычисления не успевают за частотой кадров, и фильм замедляется, но таймеры остаются неизменными, что делает их асинхронными по отношению к фильму. Оглядываясь назад, я понимаю, что использовать таймеры было плохой идеей, но сейчас я не могу ее вернуть. Итак …
есть ли способ пропустить рамки рисования? Было бы нормально, если бы в игре была более низкая частота кадров в некоторых областях, но соблюдались бы таймеры. Или у вас есть какие-либо другие идеи, как решить мою проблему? Кстати, я использую AS2.

Ответ №1:

Решение состоит в том, чтобы либо использовать меры, основанные на времени, или меры, основанные на фрейме, а не смешивать и сопоставлять их.

Предпочтительным решением было бы использовать getTime() во всех ваших событиях фрейма, чтобы определить, сколько времени прошло с момента предыдущего фрейма, и, следовательно, сколько вам нужно сделать в этом событии.

Комментарии:

1. Но это все равно не помешает flash рисовать фреймы. Я думал о том, чтобы добавить время, необходимое для увеличения интервала между двумя последовательными кадрами, но, к сожалению, updateInterval функции нет.

2. @Alex: Дело не в изменении частоты кадров. Речь идет о решении вашей реальной проблемы .

Ответ №2:

Как насчет разделения ваших обновлений на две области: update(), где вы будете обновлять только значения, которые будете использовать позже для рендеринга, и draw() / render (), где у вас будет весь ваш графический код?

У вас есть переменная пропуска фрейма, которую вы могли бы использовать в onEnterFrame для рендеринга, когда вам нужно.

например

 onEnterFrame = function(){
   update();
   if(_currentframe % frameSkip == 0) draw();
}
  

HTH