0

プログラミング初心者で、少しずつ慣れてきました。何時間もかけて修正しようとした問題に遭遇しましたが、探している結果が得られないようです。キャラクターの走行アニメーションを作成しました。彼は左、上、下、右、上右、下右に走りますが、上左と下左のアニメーションは再生されません。彼は正しい方向に動きますが、再生されるアニメーションは upRight と downRight です。upLeft と downLeft のアニメーションを「アイドル」アニメーションに変更しましたが、動作します。他のすべてのアニメーションが正しく機能しているのに、なぜこれが起こっているのかわかりません。

これが私のプレーヤーアニメーションのコードです。どんな助けやアドバイスも素晴らしいでしょう。前もって感謝します

パッケージ {

import flash.display.MovieClip;
import flash.display.*;
import flash.events.*;


public class PlayableCharacter extends Character 
{
    private var dx:int;
    private var dy:int;
    var ready:Boolean;


    public function PlayableCharacter(x:int=0, y:int=0, dx:int = 3, dy:int = 3) 
    {
        // constructor code
        this.x = x;
        this.y = y;

        this.dx = dx;
        this.dy = dy;
        ready = true;
        gotoAndStop("Idle");



        addEventListener(Event.ENTER_FRAME,onEnter);
        addEventListener(Event.ADDED_TO_STAGE, onStage);
    }

    private function onEnter(e:Event)
    {

        //doing animation stuff

        if(!leftPressed && !rightPressed && !downPressed && !upPressed)
        {
            gotoAndStop("Idle");
        }

        //Go Left
        if(leftPressed && !upPressed && !downPressed && !rightPressed)
        {
            //do something left
            goDown(-dx)
            gotoAndStop("Run");
        }

        //Go Right
        if(rightPressed && !upPressed && !downPressed && !leftPressed)
        {
            //do something right
            goDown(dx)
            gotoAndStop("Run");
        }

        //Go Up
        if(upPressed && !leftPressed && !rightPressed && !downPressed)
        {
            goUp(-dy)
            gotoAndStop("RunUp");

        }

        //Go Down
        if(downPressed && !upPressed && !rightPressed && !leftPressed)
        {
            goUp(dy)
            gotoAndStop("RunDown");
        }

        //Go UpRight
        if(rightPressed && upPressed && !leftPressed && !downPressed)
        {
            goDown(dx)
            goUp(-dy)
            gotoAndStop("UpRight");
        }

        //Go DownRight
        if(rightPressed && downPressed && !leftPressed && !upPressed)
        {
            goDown(dx)
            goUp(dy)
            gotoAndStop("DownRight");
        }

        //Go UpLeft
        if(leftPressed && upPressed && !rightPressed && !downPressed)
        {
            goDown(-dx)
            goUp(-dy)
            gotoAndStop("UpLeft");
        }

        // Go Downleft
        if(leftPressed && downPressed && !rightPressed && !upPressed)
        {
            goDown(-dx)
            goUp(dy)
            gotoAndStop("DownLeft");

        }



        if (x > stage.stageWidth)
            x = stage.stageWidth;
        else if (x < 0)
            x = 0;

        if (y > stage.stageHeight)
            y = stage.stageHeight;
        else if (y < 0)
            y = 0;
    }

    public function onStage(e:Event)
    {

    }

        public function goUp(dy:int=0)
    {
        y += dy;


        if(scaleY > 0 && dy < 0)
        {
            scaleY *= 1;
        }
        else if(scaleY < 0 && dy > 0)
        {
            scaleY *= -1;
        }


    }

        public function goDown(dx:int =0)
    {
        x += dx;


        if(scaleX > 0 && dx < 0)
        {
            scaleX *= -1;
        }
        else if(scaleX< 0 && dx > 0)
        {
            scaleX *= -1;
        }


    }


}

}

4

1 に答える 1

0

一見したところ、コードに問題はありません。フレームにラベルを使用するのではなく、代わりに番号を使用することを常にお勧めします。関数「goUp」と「goDown」の名前は間違った方向を暗示しています。「goVertical」と「goHorizo​​ntal」に変更します。leftPressed、rightPressed、... 変数はどのように設定されていますか? 各「if」内にトレースを入れて、問題が間違った if ブロックが実行されているかどうか、またはアニメーションが間違って処理されているかどうかを確認してみましたか? フレームの名前を再確認し、それぞれの番号を使用して試してみましたか?

于 2012-08-12T18:50:10.373 に答える