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;
        }
    }

実行時に、LEFT と UP の両方を押したままにすると、スプライトは斜めに移動しますが、最後の 2 つの条件 (Keyboard.UP と Keyboard.DOWN) が elseif であるという事実は、それらがまったく評価されないようにする必要があります。

誰かが行動に光を当てることができますか?

4

2 に答える 2

3

両方のボタンを押すと、フラッシュはボタンごとに2つの独立したイベントを発生させます。この場合をスキップしたい場合は、ボタンごとに状態フラグ(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 に答える