2013-05-22 2 views
2

Я использую requestAnimationFrame для привлечения игроков в свою игру. Один из игроков движется быстрее всех. Я проверил его, и он сказал мне, что его монитор имеет частоту обновления 120 Гц. Я предполагаю, что это означает, что он может обрабатывать кадры быстрее других, что приводит к более быстрой скорости движения. Любые идеи относительно того, как я могу обойти это?requestAnimationFrame Частота обновления

Благодаря

Прокладка слой, используемый ниже:

// shim layer with setTimeout fallback 
window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      window.oRequestAnimationFrame  || 
      window.msRequestAnimationFrame  || 
      function(/* function */ callback, /* DOMElement */ element){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 
+0

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

+0

Кроме того, частота обновления 120 Гц - это скорость, при которой * физический монитор * может обновлять свои пиксели. Скорость, с которой браузер пользователя может обновить свое состояние рисования, вероятно, будет намного медленнее, и это, вероятно, ограничено производительностью ЦП, памятью, скоростями шины и т. Д. – apsillers

+0

Хорошо спасибо. У меня есть 2 цикла, один для рисования и один для обновления игровой логики. – jskidd3

ответ

0

requestAnimationFrame не имеет гарантированной скорости. Он мог срабатывать при 2 Гц, если захочет.

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

0

Подумайте о requestAnimationFrame как возможность обновить/перерисовать. Вы должны по-прежнему основывать процесс обновления на сколько времени прошло.

Например, если игрок может двигаться 100px в 1 секунду и RAF стреляет каждые .1 секунд нужно обновить 10px каждый раз

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