Задать вопрос
JackShcherbakov
@JackShcherbakov

Почему персонаж так быстро двигается?

Есть что-то типа игры https://codepen.io/CitizenOne/pen/RjJPBp
При нажатии W персонаж должен двигаться, тобишь спрайт меняется с определенным интервалом (1000ms). Но у меня спрайт меняется с огромной скоростью. В секунду раз 10 меняется как минимум. В чем проблема? Как исправить?
Код, описывающий поведение спрайта:
var position = ['-8px 0', '-140px 0', '-256px 0', '-387px 0', '-526px 0', '-646px 0'] //Позициии спрайтов
  $('html').keydown(function( event ) {
    if ( event.which == 87 ) {
      var i=0;
       setInterval(function(){
          $('#sprite').css({
             'background-position' : position[i]
           });
          if(i==position.length){
            i=0;
          }
         i++;

         }, 1000);
      }
  });

ВНИМАНИЕ!
Проблему выше исправил. Там куча таймеров запускалось.

Проблема теперь в следующем:
Как сделать задержку между сменой спрайта? Код теперь выглядит вот так. Мне нужна какая-то задержка.
var position = ['-8px 0', '-140px 0', '-256px 0', '-387px 0', '-526px 0', '-646px 0']
   var i=0;
  $('html').keydown(function( event ) {
    if ( event.which == 87 ) {
     
       //setInterval(function(){
          $('#sprite').css({
             'background-position' : position[i]
           });
          if(i==position.length){
            i=0;
          }
         i++;

        // }, 1000);
      }
  });
  • Вопрос задан
  • 199 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Просто возьми и используй PointJS.
Зачем ты сам возишься со всеми этими мелочами?

Если системно - у тебя изначально подход не правильный. Цикл игры должен крутится непрерывно, а не запускать по нажатию. По нажатию должны только меняться векторы объекта, а в цикле игры ты должен измерять задержку между кадрами и пересчитывать смещение по вектору в зависимости от этой задержки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Negwereth
@Negwereth
lvivcss.com.ua
Ну setTimeout же.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы