Sollte ich in JavaScript eine Spielschleife für ein rundenbasiertes Spiel schreiben?


7

Ich verwende Javascript und HTML5 Canvas für rundenbasierte Spiele (z. B. Checkers, Mastermind, Minensuchboot).

Soll ich eine Spielschleife mit festem Zeitschritt schreiben? Was sind die Alternativen?


Schleife nur, wenn es benötigt wird. Sie müssen den Bildschirm nicht neu zeichnen, wenn sich in der Spielwelt nichts ändert. Wenn es aktualisiert wird, ist es Zeit, es neu zu zeichnen.
GSquadron

Antworten:


3

Eine ständige Schleife ist für ein rundenbasiertes Spiel wahrscheinlich nicht erforderlich.

Wenn sich etwas nur ändern wird, wenn sich ein Spieler bewegt, sollten Sie setTimeout()oder verwenden requestAnimationFrame().

Hier ist eine ungefähre Einrichtung:

var player = {x: 0, y: 0};

//to be executed whenever the player moves
function animate(xDifference, yDifference){
  var pixelsLeftX = xDifference,
      pixelsLeftY = yDifference,
      finishedMoving = false;

  var xInterval = setInterval(function(){
    pixelsLeftX = xDifference > 0 ? pixelsLeftX - 1 : pixelsLeftX + 1;
    if(pixelsLeftX === 0){
      clearInterval(xInterval);
      if(finishedMoving){
        continue()
      }else{
        finishedMoving = true;
      }
    }
  }, 10),
      yInterval = setInterval(function(){
    pixelsLeftY = yDifference > 0 ? pixelsLeftY - 1 : pixelsLeftY + 1;
    if(pixelsLeftX === 0){
      clearInterval(xInterval);
      if(finishedMoving){
        continue()
      }else{
        finishedMoving = true;
      }
    }
  });
}

function continue(){
  //etc
}

Genau das sollte ich tun, aber ich habe Zweifel, also habe ich hier zuerst gefragt. Werde es versuchen :)
userx01

1
Es ist gut zu beachten, dass, obwohl dieser Code keine explizite Schleifenstruktur ( while/ for) enthält, die JavaScript-Ereignisschleife im Hintergrund die Ursache ist setIntervalund requestAnimationFrameausgelöst wird.
Anko
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.