我正在創建一個Snake遊戲(就像舊手機上的遊戲一樣)。我在下面有一段代碼,它似乎顯示了一個對象在各行之間改變其值的怪異行爲。Javascript對象更改行間值
函數makeSnakeArray
在遊戲開始時或當蛇自身觸及(遊戲重新開始)時被調用。它返回一個新的蛇,它是一個x
和y
屬性的對象數組,存儲在全局變量snakeArray
中。
第一次被調用時,一切正常。但是,當它被稱爲重新啓動遊戲時,x
和y
值在consoleLog1
和consoleLog2
(請參閱代碼註釋)中有所不同。
在consoleLog1
中,x
和y
的值與我在函數中計算的一樣。但是,在consoleLog2
中,tempArray
會打印出snakeArray
在要求重新啓動遊戲時的情況(並且在調用makeSnakeArray
函數之前,我確定通過設置snakeArray = [];
來清除snakeArray
)。結果,蛇不像第一次那樣在屏幕中間開始,但它似乎繼續在它離開的地方。
爲什麼會發生這種情況?
功能:
function makeSnakeArray(){
var tempArray = [];
//Get the position of the head of the snake
var halfWidth = Math.floor(canvasWidth/2) * blockSize;
var halfHeight = Math.floor(canvasHeight/2) * blockSize;
//Add in each block of the snake to the snake array, starting with the head
for (var i = 0; i < startingSnakeLength; i++){
//Create and initialize the snakeBlock
var snakeBlock = {
x: halfWidth,
y: halfHeight + (i*blockSize),
}
console.log(snakeBlock); //consoleLog1
tempArray.push(snakeBlock);
}
console.log(tempArray);//consoleLog2
return tempArray;
}
輸出示例:
consoleLog1
{x: 180, y: 180}
{x: 180, y: 195}
{x: 180, y: 210}
{x: 180, y: 225}
{x: 180, y: 240}
consoleLog2
0:{x: 60, y: 270}
1:{x: 60, y: 285}
2:{x: 60, y: 300}
3:{x: 60, y: 315}
4:{x: 60, y: 330}
這裏是當前VERSI如果你想看到完整的代碼:https://codepen.io/vrsivananda/pen/NvJyGJ?editors=0010
這似乎是全球位置不正確復位,蛇似乎繼續在那裏。 –
你是什麼意思,我該如何重置全球職位? –
對不起,我的意思是你的全球蛇陣列 –