我正在创建一个乒乓球游戏,并实现了桨的移动功能。但是,当我尝试获取keyCode来查看它们是否试图向上或向下移动时,会出现此错误。
我尝试使用console.log进行几乎所有操作,以帮助找出问题所在,并查找如何在线进行操作,但没有任何帮助。
//javascript to get keyCode for wasd paddle
function getWasdKey(e){
var key = e.keyCode;
if(key == 87){
return true;
}
if(key == 83){
return false;
}
}
//javascript to get keyCode for arrow paddle
function getArrowKey(e){
var key = e.keyCode;
if(key == 38){
return true;
}
if(key == 40){
return false;
}
}
//where I use the get key functions
function paddleArrowMove(){
var paddlearrowtop = getStyle('paddlearrow', 'top');
if(getArrowKey == true){//up
setStyle('paddlearrow', 'top', paddlearrowtop - 5);
}
if(getArrowKey == false){//down
setStyle('paddlearrow', 'top', paddlearrowtop + 5);
}
}
function paddleWasdMove(){
var paddlewasdtop = getStyle('paddlewasd', 'top');
if(getWasdKey == true){//up
setStyle('paddlewasdtop', 'top', paddlewasdtop - 5);
}
if(getWasdKey == false){//down
setStyle('paddlewasdtop', 'top', paddlewasdtop + 5);
}
}
//html to run the javascript
<body onload="startIntervals();" onkeypress="getArrowKey(); getWasdKey();">
我希望桨叶会上下移动,但会出现“无法读取未定义的'keyCode'属性'”错误。
最佳答案
函数getArrowKey
和getWasdKey
带有参数e
,您显然希望将其用作相应事件的事件对象。但是,您不带任何参数调用它们:
onkeypress="getArrowKey(); getWasdKey();"
当您使用Javascript调用函数而未能传递其所有形式参数时,假定您不提供的任何内容都是
undefined
。这就是e
在这里发生的情况,并引起您的错误。由于使用
on*
属性通常不是一个好主意,因此我建议通过使用Javascript添加事件侦听器来解决此问题。除了诸如将内容和逻辑之间的关注点分离之类的其他好处外,传递给addEventListener
的函数在调用时会自动随事件对象作为其参数提供。因此删除此:
onkeypress="getArrowKey(); getWasdKey();"
从
body
元素中添加,然后将其添加到您的Javascript中:document.body.addEventListener("keypress", function(e) {
getArrowKey(e);
getWasdKey(e);
});
另外,正如@connexo正确指出的那样,您的
startIntervals
函数是完全不必要的,并且可能会导致错误-因此我也将其删除。