【发布时间】:2012-06-28 20:30:47
【问题描述】:
我有一个 2d Javascript 游戏的开始 - 目前玩家可以使用箭头键在屏幕上驱动一个三角形。
问题是有时三角形会卡在一个方向旋转或向前移动,直到再次按下相应的控制键并再次触发onkeyup 事件。这通常发生在同时按下多个控制键时。
除非onkeyup 事件由于某种原因没有被触发,否则我无法弄清楚为什么它首先会被卡住。任何帮助将不胜感激,谢谢。
这里是一些代码,你可以找到fully working example on JSFiddle:
...
function init(){
var canvas = document.getElementById('canvas');
if(canvas.getContext){
setInterval(play, 50);
}
}
function play(){
printTriState();
updateTriAcceleration();
applyTriVelocity();
updateTriRotation();
draw();
}
document.onkeydown = function(event){
if(!event.keyCode){
keycode = window.event.keyCode;
} else {
keycode = event.keyCode;
}
console.log(event.keyCode);
switch(keycode){
//left
case 37:
tri.rotation = -1;
break;
//up
case 38:
tri.throttle = true;
break;
//right
case 39:
tri.rotation = 1;
break;
//down
case 40:
tri.currentSpeed = 0;
break;
default:
break;
}
};
document.onkeyup = function(event){
if(!event.keyCode){
keycode = window.event.keyCode;
} else {
keycode = event.keyCode;
}
console.log(event.keyCode);
switch(keycode){
//left
case 37:
tri.rotation = 0;
break;
//up
case 38:
tri.throttle = false;
break;
//right
case 39:
tri.rotation = 0;
break;
//down
case 40:
break;
default:
break;
}
};
function updateTriRotation(){
if(tri.rotation == 1){
tri.orientation += tri.rotationSpeed;
} else if (tri.rotation == -1){
tri.orientation -= tri.rotationSpeed;
} else {
tri.orientation += 0;
}
}
...
【问题讨论】:
-
你能给一个工作示例的链接吗?你能把它放在 jsfiddle 上吗?
-
jsfiddle.net/6dMpF 它从左上角开始,因此您必须将其转过来并向下驶入画布。谢谢。
标签: javascript dom-events onkeydown onkeyup