2016-03-20 5 views
1

Я занимаюсь разработкой онлайн-игр. Я пытаюсь сделать онлайн-игру FPS, и я только дошел до того, что мне нужно обновить свой персонаж. Я стараюсь, чтобы мой код был прост, используя только функцию рисования и обновления. Когда HTML загружает, я исполняю как: (Нужно ли это?)Функции обновления Javascript

<body onload='DRAW(); UPDATE();'> 

Функция Жеребьевка рисует игрока на экран, и обновление предполагается проверить на нажатие клавиши для перемещения персонажа. Я пытаюсь сделать обновление скрипта с помощью этого:

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

и мне известно, что он работает нормально, потому что, когда я пытаюсь изменить код в моем интернет-IDE (c9.io), который я использую для тестирования сайта , он зависает, когда сайт работает. Я также вызываю eventListeners в функции draw. (Является ли это правильным, если я хочу проверить для ключа вниз каждый кадр?)

function DRAW() 
{ 
    window.addEventListener('keydown', function (e) { 
     keys.keys = (keys.keys || []); 
     keys.keys[e.keyCode] = true; 
    }); 
    window.addEventListener('keyup', function (e){ 
     keys.keys[e.keyCode] = false; 
    }); 
} 

Мои вопросы:

  • Есть ли более простой способ сделать обновление сценария каждый кадр?

  • Есть ли JavaScript-аддон (например, Three.js) Я могу использовать, чтобы сделать более легким для себя?

Любые знания очень ценятся.

ответ

0

Это делает все аварии:

function UPDATE() 
{ 
    update = setInterval(UPDATE, 60); 
} 

Вы рекурсивно создавая новый интервал каждый 60мс; при первом вызове UPDATE вы создаете интервал, который создает новый интервал каждые 60 мс. Все вновь создаваемые интервалы делают то же самое. Не знаю, что вы на самом деле хотите сделать здесь.

Я также вызываю eventListeners в функции draw. (Это собственно , если я хочу проверить для ключа вниз каждый кадр?)

Это прекрасно, чтобы создать eventlisteners в функции дро, если вы только вызываете эту функцию один раз. Кого я думаю, вы этого не делаете. Каждый раз, когда вы вызываете DRAW(), будет добавлен новый набор исполнителей событий, и вы действительно этого не хотите.

Что вам нужно, это форма игрового цикла. Объяснение того, как создать игру FPS, - это немного больше, чем я могу сделать, но вы можете начать с рассмотрения этой статьи. Anatomy of a video game

+0

DRAW() должен быть вызван только один раз в части HTML (насколько мне известно), , спасибо за информацию о setInterval, хотя. Я знал, что это рушится, я просто не мог понять, почему. Я проверю статью –

+0

@TaylorBrown Подумайте об этом как о эквиваленте ядерной цепной реакции. После запуска всего за 960 мс у вас уже есть 65536 интервалов, работающих параллельно, и он просто удваивается каждые 60 мс. Ваш компьютер не может справиться с этим, и браузер выйдет из строя. – dannyjolie

+0

Хорошая аналогия, теперь имеет гораздо больше смысла. –

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