我正在开发一个 3D 游戏,当我按住移动键时,我注意到一些奇怪的行为;游戏似乎暂时忽略了鼠标位置并停止更新玩家面对的方向。游戏不会冻结 - 就好像它不再注意鼠标的位置一样。
这是我用来获取按键和释放的代码:
public function keyPressed(e:KeyboardEvent):void {
switch (e.keyCode) {
case 32:
_keySpace = true;
break;
case 81:
if (!keyQ) {
keyQ=true;
}
break;
case 69:
if (!keyE) {
keyE=true;
}
break;
case 65:
if (!keyA) {
keyA=true;
}
break;
case 68:
if (!keyD) {
keyD=true;
}
break;
case 87:
if (!keyW) {
keyW=true;
}
break;
case 83:
if (!keyS) {
keyS=true;
}
break;
}
}
public function keyLift(e:KeyboardEvent):void {
if (e.keyCode==32) {
_keySpace = false;
} else if (e.keyCode==81) {
keyQ=false;
} else if (e.keyCode==69) {
keyE=false;
} else if (e.keyCode==65) {
keyA=false;
} else if (e.keyCode==68) {
keyD=false;
} else if (e.keyCode==87) {
keyW=false;
} else if (e.keyCode==83) {
keyS=false;
}
}
而更新鼠标位置的代码只是一个 ENTER_FRAME 事件:
addEventListener(Event.ENTER_FRAME, enterFrame);
...触发主游戏循环。这是使用鼠标位置的相关部分。mouseX 和 mouseY 属性在 Player 中用于向左/向右和向上/向下旋转视图。
private function enterFrame(e:Event=null):void {
_player.update(mouseX, mouseY);
}
所有这些都很好——这只是按住扫射键的问题;就好像,一旦按键开始重复,游戏就会花费所有时间来解决这些事件并且忽略更新旋转 - 即使它不依赖于 MouseEvent。
有谁知道如何让 Flash 在按住键时忽略重复键?还是有其他问题?
干杯。