Trong JavaScript, tôi có nên viết một vòng lặp trò chơi cho một trò chơi theo lượt không?


7

Tôi đang sử dụng javascript và HTML5 canvas cho các trò chơi theo lượt (ví dụ: cờ đam, chủ mưu, quét mìn).

Tôi có nên viết một vòng lặp trò chơi timestep cố định? Các lựa chọn thay thế là gì?


Chỉ lặp khi cần thiết. Bạn không cần vẽ lại màn hình khi không có gì thay đổi trong thế giới trò chơi. Khi nó cập nhật, đó là lúc để vẽ lại nó.
GSquadron

Câu trả lời:


3

Liên tục lặp có lẽ là không cần thiết cho một trò chơi theo lượt.

Nếu thời điểm duy nhất có gì đó thay đổi là khi người chơi di chuyển, hãy cân nhắc sử dụng setTimeout()hoặc requestAnimationFrame().

Đây là một thiết lập gần đúng:

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
}

đó chính xác là những gì tôi nghĩ tôi nên làm, nhưng tôi có nghi ngờ nên tôi đã hỏi ở đây trước. Sẽ thử :)
userx01

1
Thật tốt khi lưu ý rằng mặc dù không có cấu trúc vòng lặp rõ ràng ( while/ for) trong mã này, nhưng vòng lặp sự kiện JavaScript trong nền là nguyên nhân gây ra setIntervalrequestAnimationFramekích hoạt.
Anko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.