0

プラットフォーム ゲームを作成しようとしていますが、実行、ジャンプ、およびダブル ジャンプが機能しています。今私の問題は、プレーヤーがジャンプボタンを押して、ヒーローが連続してジャンプするのではなく、1回だけジャンプするようにすることです。上ボタンを押したままにすると、ジャンプしたくないので、キーを押したままでもジャンプを1回実行したいだけです。ダブルジャンプも同じにしたいのですが、どうすればいいですか?

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class Player extends MovieClip
    {
        //Player run speed setting
        var RunSpeed:Number = 8;
        //Player key presses
        var RightKeyPress:Boolean = false;
        var LeftKeyPress:Boolean = false;
        var UpKeyPress:Boolean = false;
        //Jump variables
        var Gravity:Number = 1.5;
        var JumpPower:Number = 0;
        var CanJump:Boolean = false;
        var DoubleJump:Boolean = false;

        public function Player()
        {
            // constructor code
            stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed);
            addEventListener(Event.ENTER_FRAME,Update);
            stage.addEventListener(KeyboardEvent.KEY_UP,KeyReleased);
        }

        function KeyPressed(event:KeyboardEvent)
        {
            //When Key is Down
            if (event.keyCode == 39)
            {
                RightKeyPress = true;
            }

            if (event.keyCode == 37)
            {
                LeftKeyPress = true;
            }

            if (event.keyCode == 38)
            {
                UpKeyPress = true

            }
        }

        function Update(event:Event)
        {
            //Adding gravity to the game world
            JumpPower +=  Gravity;
            //if player is more than 300 on the y-axis
            if (this.y > 300)
            {
                //Player stays on the ground and can jump
                JumpPower = 0;
                CanJump = true;
                DoubleJump = false;
            }

            //If player is on floor and right key is pressed then run right
            if ((RightKeyPress && CanJump))
            {
                x +=  RunSpeed;
                gotoAndStop('Run');
                scaleX = 1;
            }
            else if ((LeftKeyPress && CanJump))
            {
                //Otherwise if on floor and left key is pressed run left
                x -=  RunSpeed;
                gotoAndStop('Run');
                scaleX = -1;
            }
            else if ((UpKeyPress && CanJump))
            {
                //Otherwise if on floor and up key is pressed then jump
                JumpPower = -15;
                CanJump = false;
                gotoAndStop('Jump');
                DoubleJump = true;
            }

            //If on floor and right and up key are pressed then jump
            if ((RightKeyPress && UpKeyPress && CanJump))
            {
                JumpPower = -15;
                CanJump = false;
                gotoAndStop('Jump');
                DoubleJump = true;
            }

            //If on floor and left and up key are pressed then jump
            if ((LeftKeyPress && UpKeyPress && CanJump))
            {
                JumpPower = -15;
                CanJump = false;
                gotoAndStop('Jump');
                DoubleJump = true;
            }

            //If jumped and right key is pressed then move right
            if ((RightKeyPress && CanJump == false))
            {
                x +=  RunSpeed;
                scaleX = 1;
            }
            else if ((LeftKeyPress && CanJump == false))
            {
                //Otherwise if jumped and left key is pressed then move left
                x -=  RunSpeed;
                scaleX = -1;
            }

            //If in air and able to doublejump and pressed up key, then double jump
            if (UpKeyPress && DoubleJump && JumpPower > -2)
            {
                JumpPower = -13;
                DoubleJump = false;
                gotoAndStop('DoubleJump');
            }

            //If on floor and no key is presses stay idle
            if ((!RightKeyPress && !LeftKeyPress && CanJump))
            {
                gotoAndStop('Idle');
            }

            this.y +=  JumpPower;
        }

        function KeyReleased(event:KeyboardEvent)
        {
            if (event.keyCode == 39)
            {
                event.keyCode = 0;
                RightKeyPress = false;
            }

            if (event.keyCode == 37)
            {
                event.keyCode = 0;
                LeftKeyPress = false;
            }

            if (event.keyCode == 38)
            {
                event.keyCode = 0;
                UpKeyPress = false;
            }
        }
    }
}
4

1 に答える 1

2

プレーヤーの y 値が条件を満たすとすぐに、プレーヤーがif (this.y > 300)再びジャンプできるようになるので、キーが押されている限り、UpKeyPress && CanJump両方が true であるため、プレーヤーがジャンプすることが起こっているのではないかと思います。

私の推測では、次のようなことをすると、答えに近づく可能性があります...

あなたの更新機能で:

function Update(event:Event)
{
    //Adding gravity to the game world
    JumpPower +=  Gravity;
    //if player is more than 300 on the y-axis
    if (this.y > 300)
    {
        //Player stays on the ground and can jump
        JumpPower = 0;
        // Do not allow another jump until the UpKey is pressed
        //CanJump = true;
        //DoubleJump = false;
    }
    ...

次に、 KeyPressed 関数で:

function KeyPressed(event:KeyboardEvent)
{
    //When Key is Down
    if (event.keyCode == 39)
    {
        RightKeyPress = true;
    }

    if (event.keyCode == 37)
    {
        LeftKeyPress = true;
    }

    if (event.keyCode == 38)
    {
        UpKeyPress = true
        // Do not allow another jump until the UpKey is pressed
        if (this.y > 300)
        {
            CanJump = true;
            DoubleJump = false;
        }
    }
}

また、ブレークポイントを設定し、コードのデバッグに慣れるという shaunhusain の推奨事項にも従います。

于 2013-06-01T04:30:46.090 に答える