0

stickman という名前のムービークリップを作成しました。その中で、棒人間が走るように毎フレーム一連の動きを描いてアニメーションを作成しました。今私が欲しいのは、キーを押すと棒人間が左から右に走り、キーを離すと止まるということです。これは私のコードです:

RunningMan.stop();

stage.addEventListener(KeyboardEvent.KEY_DOWN,keypresseddown);
function keypresseddown(event:KeyboardEvent):void
{

var key:uint = event.keyCode;
switch (key) {
   case Keyboard.LEFT :
   {
       RunningMan.play();
       RunningMan.x-=10;
       RunningMan.scaleX=-1;
       if(RunningMan.x<=0)
       {
           RunningMan.x=0;
       }
   };
    case Keyboard.RIGHT :
    {
        RunningMan.play();  //play animated run 
        RunningMan.x+=10;
        RunningMan.scaleX=1;
        if(RunningMan.x>=stage.width)
        {
            RunningMan.x=stage.width;
        }
    };
    default: RunningMan.stop();
   }
}

ただし、キーを押したままにすると、アニメーションが実行されずに左から右に移動しました。

どうすれば修正できますか?前もって感謝します。

編集:、およびcharacterという名前の 3 つのムービークリップを含む というムービークリップがあります。上矢印キーを押すとジャンプしますが、すぐにキーを離すと、ジャンプ ムービークリップがフレームを終了できなかったため、高くジャンプしませんでした。これはコードです:standingrunningjumping

      if (key.isDown(Keyboard.LEFT))
            {

                gotoAndStop("running");
                BGround.x+=speed;
                scaleX=-1;
                if(BGround.x>=stage.stageWidth)
                    BGround.x=stage.stageWidth;
            }
            else if (key.isDown(Keyboard.RIGHT))
            {

                gotoAndStop("running");
                BGround.x -= speed;
                scaleX=1;

            }
            else
            if (key.isDown(Keyboard.UP))
            {
                gotoAndStop("jumping");

            }
            else
            gotoAndStop("standing");

どうすれば修正できますか?

4

1 に答える 1

1

まず、RunningMan がクラス自体ではなく、クラスのインスタンスであることを願っています。インスタンスの場合は、コードを他のユーザーと共有するときの一般的な命名規則に従う必要があります (現在行っているように)。つまり、runningMan になります。

まず、runnigMan のタイムラインの 1 番目のフレームを男性が静止している写真にして、「静止」などの名前を付けます。次に、2番目の「実行中」に名前を付けて、20フレームまたはアニメーションの長さを延長します。最後のフレームでは、タイムライン コードを使用する必要があります。gotoAndPlay("running") の 1 行だけで、2 ~ 20 (または何でも) のフレームがループします。タイムライン コードの外側からフレーム 1 に移動するようにタイムラインに指示すると、それ以上ループせず、静止している男性のフレームにとどまります。したがって、ループを開始したい場合は外部から:

runningMan.gotoAndPlay("running"); // frame 2

止まる:

runningMan.gotoAndStop("still"); // frame 1

または、RunningMan クラス内から行うこともできます

public function startRunAnimation():void{
  this.gotoAndPlay("running");
}
public function stopRunAnimation():void{
  this.gotoAndStop("still");
}

そして、これらの関数名をあなたが持っているものに置き換えるだけでそれらを使うことができます ex( play() の代わりに startRunAnimation() になります)

編集

この問題に対してできることは、キャラクターが空中にいるときのブール変数を持つことです (地面との衝突検出を行うコードのどこか、または重力を処理する場所 - ただし、設定されています)。キャラクターがいつ空中にいるのかをコードで知ることができます。そして、必要な方法でこれを簡単にテストできます。...

        if (key.isDown(Keyboard.UP) || this.inAir==true)
        {
            gotoAndStop("jumping");

        }
        else
        gotoAndStop("standing");

ただし、キャラクターが重力や摩擦などを持つ衝突可能なオブジェクトから継承されていない場合は、他のクラスの inAir プロパティを public にするか、getter 関数を作成して、ここでアクセスできるようにする必要があります。これが役立つことを願っています。

于 2013-10-31T02:42:57.487 に答える