0

横スクロールアクション ゲームを作成しようとしていますが、今は自分のキャラクターを攻撃させています。これまでに 3 つの攻撃アニメーションがあり、ほぼ機能します。攻撃ボタンを連打すると攻撃してきますが、問題は攻撃ボタンを押すとすぐに次の攻撃アニメーションに移ってしまうことです。現在のアニメーションの途中で次のフレームにジャンプするのではなく、現在の攻撃アニメーションが終了したら、次の攻撃アニメーションに移動するにはどうすればよいですか。そのため、キャラクターに攻撃を終了させ、プレイヤーがまだ攻撃キーを入力すると、次の攻撃フレームに移動します。

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

    public class Player extends MovieClip
    {
        //Attack variables
        var Attacking:Boolean = false;
        var Punches:int = 0;
        var Punching:Boolean = false;
        var Kicks:int = 0;
        var Kicking:Boolean = false;

        public function Player()
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed);
            addEventListener(Event.ENTER_FRAME,Update);
        }

        function KeyPressed(event:KeyboardEvent):void
        {
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);

                //If A key is down
                if (event.keyCode == 65)
                {
                    Attacking = true;
                    Punching = true;
                    Punches++;
                }
        }

        function Update(event:Event)
        {
            //If player is not attacking
            if (Attacking == false)
            {
                Punching = false;
                Punches = 0;
                Kicking = false;
                Kicks = 0;
            }   
            else if (Attacking == true)
            {

                if (Punching == true)
                {
                    gotoAndStop('Jab' + Punches);
                }
            }

        }


        function KeyUp(event:KeyboardEvent)
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);

        }
    }
}

また、私が置いたすべての攻撃アニメーションの最後のフレーム内

import flash.display.MovieClip;
import flash.events.Event;

stop();
MovieClip(parent).Attacking = false;
MovieClip(parent).Punches = 0;
4

1 に答える 1

0

まず最初に、KeyPressedKeyUpメソッドの両方に追加および削除するイベント リスナーを削除し (それらは必要なく、単に問題を引き起こすだけです)、他の 2 つと同様にコストラクタにキー アップ イベントを登録する必要があります。

次に、これを行うには、キーの押下をリッスンするのではなく、キーが押されているかどうかを確認する必要があります。これを行うには、たとえば、という名前の新しいフィールドが必要ですholdingAttackKey

        var holdingAttackKey:Boolean = false;  



        function KeyPressed(event:KeyboardEvent):void {
            if (event.keyCode == 65)
            {
                holdingAttackKey = true;

                Attacking = true;
                Punching = true;
                //...



    function KeyUp(event:KeyboardEvent)
    {
        holdingAttackKey = false;
    }



    function Update(event:Event)
    {
        if(holdingAttackKey && Attacking==false) {
                Attacking = true;
                Punching = true;
                Punches++;
        }
        //....
于 2013-08-04T00:29:54.097 に答える