AS3.0 if / else if速度控制的评估行为

时间:2013-02-07 10:49:37

标签: actionscript-3 flash if-statement conditional velocity

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

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

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&amp; Keyboard.DOWN)是elseifs的事实应该阻止它们被评估吗?< / p>

有人能够对这种行为有所了解吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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;
    }
}