Actionscript 3 键盘代码使字符直接向上跳跃,但在';它在空中

Actionscript 3 键盘代码使字符直接向上跳跃,但在';它在空中,actionscript-3,game-engine,Actionscript 3,Game Engine,当我按住左键时,我可以向左移动,按住右键时,我可以向右移动, 但是,当我按下“向上”键时,角色会跳跃并且不移动,但仅当我按住左键和向上键| |右键和向上键时,角色才会向上移动 如果有帮助,下面是代码的其余部分 public function movementChar() { if (upKey) { this.y -= 10; this.gotoAndStop("jump"); //this.scaleX = -1;

当我按住左键时,我可以向左移动,按住右键时,我可以向右移动, 但是,当我按下“向上”键时,角色会跳跃并且不移动,但仅当我按住左键和向上键| |右键和向上键时,角色才会向上移动

如果有帮助,下面是代码的其余部分

public function movementChar()
{   
    if (upKey)
    {
        this.y -= 10;
        this.gotoAndStop("jump");
        //this.scaleX = -1;     
    }
    else
    if (leftKey)
    {
        this.x -= xSpeed;
        this.gotoAndStop("run");
        this.scaleX = -1;
    }
    else if (rightKey)
    {
        this.x += xSpeed;
        this.gotoAndStop("run");
        this.scaleX = 1;
    }
    else if(!leftKey || !rightKey)
    {
        this.gotoAndStop("stop");
    }
}

问题是您在if/if-else条件中设置了它,但它应该仅是if条件。像

private function keyUp(e:KeyboardEvent):void 
{
    if (e.keyCode == 37)
    {
        leftKey = false;
    }
    if (e.keyCode == 39)
    {
        rightKey = false;
    }   
    if (e.keyCode == 38)
    {
        upKey = false;
    }       
}

private function keyDown(e:KeyboardEvent):void 
{
    if (e.keyCode == 37)
    {
        leftKey = true;
    }
    if (e.keyCode == 39)
    {
        rightKey = true;
    }
    if (e.keyCode == 38)
    {
        upKey = true;
    }
}

因为仔细想想,在您的代码中,您首先检查是否按下了向上键,如果计算结果为true,它将执行该部分并跳过其余部分,因为只有当向上键为false时,才能执行所有其他if条件。

回答得很好,谢谢!它起作用了。但有一个问题。动画继续播放,应该有一个空闲的动画,因此如果播放器没有按任何键(如果所有关键点都为false),那么角色应该转到“空闲”帧。如果(!upKey&&!leftKey&&!rightKey){this.gotoAndStop(“stop”);}您可能已经找到了,但是如果您想要一个空闲的动画,只需检查每个键是否为false,即如果(!upKey&&!leftKey&&!righkey)那么(空闲播放)
if(leftKey){
...
}
if(rightKey){
..
}
if(upKey){
...
}