gpt4 book ai didi

actionscript-3 - 在 ActionScript3 中流畅地处理多个按键

转载 作者:行者123 更新时间:2023-12-04 05:16:44 24 4
gpt4 key购买 nike

我目前正在为平台游戏构建一个引擎,但我注意到 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..)键触发器会增加播放器加速度,这在单独的帧上事件处理程序中再次应用于播放器。

一切正常 - 但是当使用多个按键时会出现问题。如果玩家开始向右移动并击中跳跃,他将停止加速。同时,他不会按照Keyboard.UP方法中的指示减速。相反,他将保持他当前的速度不变,直到再次按下 RIGHT 键。

简而言之,就好像 Actionscript 开始忽略 RIGHT 或 LEFT 移动键的 keyboard.down 和 keyboard.up 方法,直到它们不再被按下。这显然会导致一些非常严格的游戏玩法 - 有没有人愿意与我分享的任何解决方案?

最佳答案

您的问题在于您的 if 条件后跟 if else 条件。删除 else 并只使用 if 条件。基本上,如果用户按住空格,则不会测试其他 if 条件,因为空格被按住,这是第一个 if 语句。因此,只需将 if 中的 else 去掉即可。只需删除测试击键的 if else 条件,而不是处理击键的 if 语句中的条件。

您的代码应该如下所示:

function onKeyDown(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.UP || event.keyCode == Keyboard.W || event.keyCode == Keyboard.SPACE) {
if (isTouchingGround()) {
isJumping = true;
yv = -100;
}
}
if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.D) {
if (xv == 0) {
player.gotoAndPlay(275);
}
}
if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.A) {
if (xv == 0) {
xv = -24;
} else if (xv != -120) {
xv-=2;
}
}
if (event.keyCode == Keyboard.RIGHT || event.keyCode == Keyboard.D) {
if (xv == 0) {
xv = 24;
} else if (xv != 120) {
xv+=2;
}
}
}

还有一点你可能会注意到,当UP键和RIGHT键都被按住时,电脑似乎卡住了键盘输入,但是当W键和D键被按住时,你仍然可以按其他键,电脑会注册他们的输入。这个问题的答案是 here .

更新:

对于流体部分,与其在发生击键时触发某事,不如使用 bool 变量,例如 keyUPUP如果键按下时为真,当键向上时为假。然后有一个功能 onEnterFrame(event:Event):void {}keyUP 时执行操作是真的。像这样:
import flash.events.*;

public class keyEvents extends MovieClip {
private var keyRIGHT:Boolean = false;

public function keyEvents():void
{
this.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
this.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

function onKeyDown(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.RIGHT) {
this.keyRIGHT = true;
}
}

function onKeyUp(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.RIGHT) {
this.keyRIGHT = false;
}
}

function onEnterFrame(event:Event):void
{
if(this.keyRIGHT) {
// This code is executed while the RIGHT arrow key is down.
}
}
}

如果上面的代码不起作用,我认为你的问题出在你的键盘上,不是它坏了,而是它的制作方式可能把事情搞砸了。

如果这没有帮助,请告诉我,我会继续尝试。

关于actionscript-3 - 在 ActionScript3 中流畅地处理多个按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14166083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com