2017-06-13 86 views
3

首先,我學習JavaScript並嘗試創建一箇舊的Atari Pong遊戲。我被困在這個地方,我可以讓其中一個槳移動,但不是第二個。遊戲仍然有效,但一個槳不會移動。這裏是我的槳代碼不會移動:需要幫助在畫布上移動兩個對象

var p2X = canvas.width/2 + 550; 
var p2Y = canvas.height/2; 
var p2Radius = 35; 
var p2Height = 100; 

和:

var p2UpPressed = false; 
var p2DownPressed = false; 
document.addEventListener("keydown", keyDownHandler, false); 
document.addEventListener("keyup", keyUpHandler, false); 

我已經使用事件偵聽和KeyUp/downHandler的第一槳,我想知道,如果這是爲什麼第二個不會移動?

function keyDownHandler(e){ 
if(e.keyCode == 87){ 
p2UpPressed = true; 
} 
else if(e.keyCode == 83){ 
p2DownPressed = true; 
} 
} 
function keyUpHandler(e){ 
if(e.keyCode == 87){ 
p2UpPressed = false; 
} 
else if(e.keyCode == 83){ 
p2DownPressed = false; 
} 
} 

下面是實際的移動位:

if(p2UpPressed && p2Y <canvas.height-p2Radius){ 
p2Y += 7; 
} 
else if(p2DownPressed && p2Y > 0){ 
p2Y-=7; 
} 

任何幫助將非常感激。謝謝!

+0

被稱爲玩家1的處理程序是什麼?你已經爲玩家2稱他們爲'keyDownHandler'和'keyUpHandler',那麼他們對玩家1有相同的名字嗎? – Clonkex

+1

他們對槳1有相同的名字。我想我已經開始看到我出錯的地方了。 – slikk

+0

更改p2的處理程序名稱並猜測是什麼?有用!謝謝! – slikk

回答

1

首先,調試小技巧:首先看看玩家2的處理程序是否被調用!容易做到,只需將console.log("hello fren");放入處理程序中,然後按下鍵並觀看控制檯。另外,您可以使用斷點或在控制檯中「看」的p2UpPressed變量,但這些技術是有點更先進,在這種情況下不是真的有必要。

所以根據猜測,然後你在評論中確認,你有你的處理函數命名爲雙方球員一樣。這是行不通的,因爲它只會使用代碼中首先定義的任何一個函數。不要忘了,你可以命名任何你想要的功能,因此,如果您覺得這樣的傾向(儘管該公約是,你命名他們一些合理的:P),你能說出他們p1KeyDownHandlerp2KeyDownHandler,或者yoyoboimisterdude

我敢肯定,你可以添加多個處理程序相同的事件,但是這可能是更好的方式來做到這一點:

function keyDownHandler(e) { 
    if (e.keyCode == xx) { //replace xx with whatever keycode you want for p1 
     p1UpPressed = true; 
    } else if (e.keyCode == xx) { //same as above 
     p1DownPressed = true; 
    } else if (e.keyCode == 87) { 
     p2UpPressed = true; 
    } else if (e.keyCode == 83) { 
     p2DownPressed = true; 
    } 
} 

function keyUpHandler(e) { 
    if (e.keyCode == xx) { //same as above 
     p1UpPressed = false; 
    } else if (e.keyCode == xx) { //same as above 
     p1DownPressed = false; 
    } else if (e.keyCode == 87) { 
     p2UpPressed = false; 
    } else if (e.keyCode == 83) { 
     p2DownPressed = false; 
    } 
} 

然後你只這樣做一次:

document.addEventListener("keydown", keyDownHandler, false); 
document.addEventListener("keyup", keyUpHandler, false);