2016-06-18 2 views
-4

Привет, я делаю игру и для вражеского атака. Я хочу использовать setInterval, чтобы выполнить атакующую функцию. Проблема заключается в том, когда заданный интервал времени выполняет он вызывает функцию более одного раза, не так, как после установленного времени, но в один процесс выполнения более чем один разset interval function вызывает не один раз, но случайным образом

это специальный код, который не работает, как должно

var setAttack = function(){ 
      intr ++; 
      entity.attack(entity.wepon, dt); 
      var isColliding = collides(entity.wepon, target.entity); 
      if(isColliding) 
      { 
       target.stats.health -= 1; 
       console.log(target.stats.health); 
      } 

     } 

     if((attalumsFromTargetX >= -42) && (attalumsFromTargetX <= 42)) 
     { 

      att = setInterval(setAttack, 2000); 

     } 

это ссылка на полный файл - https://github.com/Reenasyoo/Purplust/blob/master/src/entity.js

entity.attack() начинается при 230 линии затем setAttack() начинается с 282 строки

так, когда setInterval начинает свою вещь, функция setAttack называется случайным временем за одно время выполнения

Надеюсь, кто-то понял, что я пытался сказать! btw im используя rAf для анимации!

спасибо заранее!

+0

Когда если оператор выполняется несколько раз будет больше setintervals. используйте console.log() для отладки внутри оператора if. если ((attalumsFromTargetX> = -42) && (attalumsFromTargetX <= 42)) { console.log ('setInterval'); att = setInterval (setAttack, 2000); } –

+0

Когда вы видите setInterval в консоли javascript несколько раз, то вы определили свою проблему. Я бы порекомендовал statemachine для искусственного интеллекта в javascript. Игра с setTimeout или setInterval - не лучший способ пойти на игры –

+0

Я понял. Благодаря! –

ответ

3

Вы должны использовать это:

 att = setTimeout(setAttack, 2000); 

Вместо

 att = setInterval(setAttack, 2000); 
+0

Мне нужно выполнить функцию setAttack каждые 2 секунды, а не yust один раз, но в том случае, когда вы выполняете однократное случайное время. если вы не получите мою идею, загрузите git и попробуйте, в консоли вы увидите мою проблему. попробуйте обновить несколько раз. вы можете перемещаться с помощью a и d. –

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