2016-06-18 10 views
-4

Hallo ich mache Spiel und für feindliche atack möchte ich setInterval Hexe verwenden würde angreifende Funktion ausführen. Problem ist, wenn der festgelegte Intervall ruft Funktion mehr als einmal ausgeführt wird, nicht wie nach der eingestellten Zeit, aber in einem Ausführungsprozess mehr als einmalSet-Intervall-Funktion ruft mehr als einmal, aber zufällig

Dies ist der spezifische Code, arbeiten, wie es tut sollte

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); 

     } 

dies ist Link auf vollständige Datei - https://github.com/Reenasyoo/Purplust/blob/master/src/entity.js

entity.attack() beginnt bei 230 Linie dann setAttack() beginnt bei 282 Linie

so, wenn die setInterval startet seine Sache, setAttack-Funktion heißt zufällige Zeiten in einer Ausführungszeit

ich hoffe, jemand verstand, was ich versuchte zu sagen! BTW ich benutze rAf für die Animation!

Vielen Dank im Voraus!

+0

Wenn die if-Anweisung mehrere Male ausgeführt wird, wird es mehr setintervals sein. Verwenden Sie console.log(), um innerhalb der if-Anweisung zu debuggen. if ((attalumsFromTargetX> = -42) && (attalumsFromTargetX <= 42)) { console.log ('setInterval'); att = setInterval (setAttack, 2000); } –

+0

Wenn Sie SetInterval in der Javascript-Konsole für mehrere Male sehen, dann haben Sie Ihr Problem identifiziert. Ich würde eine staatliche Maschine für künstliche Intelligenz in Javascript empfehlen. Herumspielen mit setTimeout oder setInterval ist nicht der beste Weg für Spiele –

+0

Ich fand es heraus. Vielen Dank! –

Antwort

3

Sie sollten diese verwenden:

 att = setTimeout(setAttack, 2000); 

Statt

 att = setInterval(setAttack, 2000); 
+0

Ich muss setAttack-Funktion alle 2 Sekunden ausführen, nicht einmal einmal, aber in diesem eine Ausführung einmal nicht zufällige Zeiten. Wenn Sie meine Idee nicht herunterladen git, und versuchen Sie es, in der Konsole werden Sie mein Problem sehen. versuche es mehrmals zu aktualisieren. Sie können sich mit a und d bewegen. –

Verwandte Themen