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?
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?
Antworten:
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
}
while
/ for
) enthält, die JavaScript-Ereignisschleife im Hintergrund die Ursache ist setInterval
und requestAnimationFrame
ausgelöst wird.