AS3.0, если/еще, если поведение оценки для скоростного контроля

Жаль, если это очевидно для других, но я не могу получить голову вокруг чего-то в 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;
        }
    }

When run, if I hold both LEFT and UP the Sprite moves Diagonally, but the fact that the two last conditionals (Keyboard.UP & Keyboard.DOWN) are elseifs should prevent them from being evaluated at all shouldnt it?

В состоянии кто-либо, чтобы пролить некоторый свет на поведение?

0
nl ja de

2 ответы

Когда вы нажимаете оба огня вспышки кнопок два независимых события для каждой кнопки. Если вы хотите пропустить этот случай, можно сделать государственные флаги (leftPressed, rightPressed, и т.д.) для каждой кнопки, состояния изменения в ключевом укладчике и назвать клетчатый метод движения согласно текущим состояниям каждой кнопки.

3
добавлено
Вот именно, конечно. I' m дурак. Спасибо за это.
добавлено автор hammus, источник

Если вы не хотите диагональное движение, установите скоростные компоненты в ноль сначала как это:

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;
    }
}
1
добавлено
Спасибо за это. хороший наконечник. Просто для уточнения я ДЕЙСТВИТЕЛЬНО хочу диагональ, но я хотел понять, ПОЧЕМУ это происходило.
добавлено автор hammus, источник