2017-06-13 58 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);