簡體   English   中英

為什么 pop 方法在我的貪吃蛇游戲中不起作用

[英]Why isn't pop method working in my snake game

所以這里是關於我的貪吃蛇游戲如何運作的非常簡短的描述。 for 循環用於繪制蛇。Newhead 是一個 object,經過第一次迭代后,newhead 現在是占據索引 0 的新元素,因為我們使用 .unshift() 方法將 newhead 添加到我們的蛇數組的前面。 為了避免在 setInterval 循環的每次迭代期間讓我們的新元素獲得相同的 position,我們將 x 坐標添加或遞增 20(這會影響稍后 for 循環中的 rect,因為 snake[0] 現在將更改,即 x 將為 60而不是 40 並且 snake[1] 使用 snakex 獲取了舊 snake[0]) 的元素。 但我不明白的是為什么 snake.pop 不刪除我們數組中的最后一個元素或 object 即從蛇中刪除一個矩形

 var canvas = document.querySelector("canvas"); var right = document.querySelector("right"); var left = document.querySelector("left"); var up = document.querySelector("left"); var down = document.querySelector("left"); canvas.width = window.innerWidth; canvas.height = window.innerHeight - 200; var ctx = canvas.getContext("2d"); width = 20; height = 20; var snake = [{ x: 40, y: 0 }, { x: 20, y: 0 }]; function move() { for (var i = 0; i < snake.length; i++) { console.log(i); //lets just say i stands for index number ctx.strokeStyle = "orange"; ctx.strokeRect(snake[i].x, snake[i].y, width, height); } snakex = snake[0].x; snakey = snake[0].y; snakex += 20; var newhead = { x: snakex, y: snakey }; snake.pop(); snake.unshift(newhead); ctx.clearRect(0, 0, width, height); } setInterval(move, 800);
 <canvas></canvas> <button id="right">right</button> <button id="down">down</button> <button id="left">left</button> <button id="up">up</button>

它正確彈出,問題是 clearRect 調用,您將寬度和高度傳遞給它,但它們設置為 20,因此只有頂部 20x20 被清除,因此您可以看到屏幕上打印的所有幀。

工作示例: https://jsfiddle.net/vLxmws9d/

編輯:不知道為什么 SO 片段沒有運行所以我改用了 jsfiddle。

var canvas= document.querySelector("canvas");
var right=document.querySelector("right");
var left=document.querySelector("left");
var up=document.querySelector("left");
var down=document.querySelector("left");

canvas.width=window.innerWidth;
canvas.height=window.innerHeight-200;
var ctx= canvas.getContext("2d");

width= 20;
height=20;

var snake=[{x:40, y:0}, {x:20, y:0}];

function move(){
  ctx.clearRect(0,0,canvas.width,canvas.height);
  for(var i=0; i<snake.length; i++){
    //lets just say i stands for index number
    ctx.strokeStyle="orange";
    ctx.strokeRect(snake[i].x, snake[i].y, width, height);
  }


  snakex=snake[0].x;
  snakey=snake[0].y;

  snakex+=20;

  var newhead={x:snakex, y:snakey};
  snake.unshift(newhead); 
  snake.pop();
}

setInterval(move, 800);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM