0

抱歉,如果这对其他人来说很明显,但我无法理解 ActionScript 3.0 中的某些内容(顺便说一句,巨大的 n00b)

我有这个控制速度的代码:

public function keyDownHandler(event:KeyboardEvent):void
    {
        if (event.keyCode == Keyboard.LEFT)
        {
            vx = -5;
        }
        else if (event.keyCode == Keyboard.RIGHT)
        {
            vx = 5;
        }

        else if (event.keyCode == Keyboard.UP)
        {
            vy = -5 
        }
        else if (event.keyCode == Keyboard.DOWN)
        {
            vy = 5;
        }
    }

运行时,如果我同时按住 LEFT 和 UP,Sprite 会沿对角线移动,但是最后两个条件(Keyboard.UP 和 Keyboard.DOWN)是 elseif 的事实应该完全阻止它们被评估,不是吗?

有没有人能够阐明这种行为?

4

2 回答 2

3

当您同时按下两个按钮时,闪光灯会为每个按钮触发两个独立的事件。如果您想跳过这种情况,您可以为每个按钮制作状态标志(leftPressed、rightPressed 等),在按键处理程序中更改状态并根据每个按钮的当前状态调用检查动作方法。

于 2013-02-07T10:54:37.997 回答
1

如果您不想对角线移动,请先将速度分量设置为零,如下所示:

public function keyDownHandler(event:KeyboardEvent):void
{
    vx = vy = 0; ////

    if (event.keyCode == Keyboard.LEFT)
    {
        vx = -5;
    }
    else if (event.keyCode == Keyboard.RIGHT)
    {
        vx = 5;
    }

    else if (event.keyCode == Keyboard.UP)
    {
        vy = -5 
    }
    else if (event.keyCode == Keyboard.DOWN)
    {
        vy = 5;
    }
}
于 2013-02-07T10:55:11.747 回答