我目前正在为平台游戏构建引擎,但我注意到 ActionScript3 在使用多个按键时难以保持流畅。例如;
function onKeyDown(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.UP || event.keyCode == Keyboard.W || event.keyCode == Keyboard.SPACE) {
if (isTouchingGround()) {
isJumping = true;
yv = -100;
}
} else if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.D) {
if (xv == 0) {
player.gotoAndPlay(275);
}
} else if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.A) {
if (xv == 0) {
xv = -24;
} else if (xv != -120) {
xv-=2;
}
} else if (event.keyCode == Keyboard.RIGHT || event.keyCode == Keyboard.D) {
if (xv == 0) {
xv = 24;
} else if (xv != 120) {
xv+=2;
}
}
}
因此,如上所述,使用 UP(或 W,或 Space)键会触发玩家跳跃(单独的 onframe 事件处理程序处理重力等)。使用 RIGHT(或 D..)键触发器会增加玩家加速度,这会在单独的 onframe 事件处理程序中再次应用于玩家。
一切都可以正常工作-但是当使用多次击键时就会出现问题。如果一名球员开始向右移动,并击中跳跃,他将停止加速。同时,他不会按照 Keyboard.UP 方法中的指示减速。相反,他将保持当前速率不变,直到再次按下 RIGHT 键。
简而言之,就好像 Actionscript 开始忽略 RIGHT 或 LEFT 移动键的 keyboard.down 和 keyboard.up 方法,直到它们不再被按下。这显然会导致一些非常严格的游戏玩法 - 有没有人愿意与我分享这方面的任何解决方案?