Несколько секундных вычислений в игре при скорости 60 FPS - PullRequest
0 голосов
/ 13 июля 2010

У меня есть алгоритм, выполнение которого занимает более нескольких секунд. Я пытаюсь реализовать это в флеш-игре со скоростью 60 кадров в секунду, которую я создаю. Мне интересно, есть ли какое-то условие в ActionScript3, чтобы прервать вычисление, чтобы обновить фрейм и продолжить вычисление впоследствии. Вероятно, нет, поэтому я предполагаю, что лучшим методом было бы выполнить вычисление в течение x миллисекунд, измерить частоту кадров после, а затем настроить время, в течение которого вычисление будет выполняться для следующего кадра, если частота кадров меньше или больше 60 кадров в секунду. Недостатком этого является то, что игра не будет работать с постоянной скоростью 60 кадров в секунду ...

Любые другие идеи о том, как (оптимально) выполнить большие вычисления в AS3 при сохранении частоты кадров?

РЕДАКТИРОВАТЬ: Для любопытных (расчет, возможно, я должен был сказать, алгоритм): Я создаю библиотеку планирования движения для игровых объектов ИИ (одно из них используется для планирования движения). Алгоритм подобен RRT (быстро исследующему случайному дереву), которое повторяется тысячи раз.

Демонстрационная ссылка: http://www.swfcabin.com/open/1279044355

Нажмите для плана движения. Круг может «тянуться» с фиксированной величиной в любом направлении.

Также - нет линейного демпфирования скорости (т. Е. Трения).

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

В зависимости от типа ваших расчетов вы можете написать ядро ​​Pixel Bender, которое выполняет обработку в фоновом режиме с помощью ShaderJob:

http://www.boostworthy.com/blog/?p=243

http://www.huesforalice.com/project/47

В качестве альтернативы вот еще одна ссылка на учебное пособие по реализации псевдопоточности в Actionscript: http://blogs.adobe.com/aharui/2008/01/threads_in_actionscript_3.html

2 голосов
/ 13 июля 2010

Можете ли вы сделать «расчет» поэтапно, а затем просто сделать один этап на кадр, пока он не будет сделан?Разделите его на куски, которые, как вы знаете, могут вписаться в кадр, и делать это со временем.

Несколько примеров:

Одна игра, в которой я работал над вычисляемой линией обзора между сущностями.Это заняло много времени, и аппаратное обеспечение не было очень мощным, поэтому мы обновляли линию обзора только для одного объекта в каждом кадре.Линия обзора игрока обновлялась каждый второй кадр, а враги обновлялись циклически в промежуточных кадрах.

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

Возможно, ваш расчет не легко сопоставим ни с одним из них;если у вас есть пример того, чего вы пытаетесь достичь, это было бы очень полезно!

0 голосов
/ 19 марта 2014

ОБНОВЛЕНИЕ: флеш-плеер поддерживает работников с 11.4

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

Мобильный AIR пока не поддерживает работников на операциях ввода-вывода (AIR 4.0 и AIR 13 бета) ..

Также, как уже говорили другие, поиск пути не должен быть таким длинным!вам следует рассмотреть возможность использования другого алгоритма, поскольку Rapid не совместим с алгоритмом, выполнение которого занимает более нескольких секунд .Самый известный алгоритм поиска пути: Звезда (A *)

...