0

ENTER FRAMEに問題があったので、別のクラスに移動しました。これがクラスの外観です

 package  {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.accessibility.Accessibility;
    import flash.display.DisplayObject;
    import flash.display.Stage;


    public class enemy extends MovieClip {

        public function enemy() {
            // constructor code

            this.addEventListener(Event.ENTER_FRAME, moveEnemy);

        }
    public function moveEnemy(e:Event):void{

        this.x += 5;
        if(stage.player.scaleX == 1){
            this.scaleX = 1;
            }else {
                this.scaleX = -1;
                }

        }
    }

}

今、プレイヤーに応じて敵のスケーレックスを調整しようとしていますが、クラス内のプレイヤーを参照するとエラーが発生します。これを解決するのに役立つ人はいますか?

4

2 に答える 2

1

Event.ENTER_FRAMEリスナーを使用する際の秘訣はevent.currentTarget、イベントを処理しているオブジェクトへのevent.targetリンクを保持し、最初にイベントを受信したオブジェクトへのリンクを保持するため、リスナーをステージではなく、ゲーム全体で複数のリスナーを持つことを含む、あなたの選択。たとえば、クラスにリスナーを与えて、Enemyステージのプレーヤーの弾丸のリストを照会し、衝突をチェックthisするようにします。プレーヤーもこれを行うことができます。または、単一のリスナーを使用し、その内部ですべての作業を行い、ローカル配列を使用して、敵、弾丸、プレーヤー、およびその他のオブジェクトのリストを格納します。

フレームリスナーに入るパラメータを渡すという点では、イベントは自動的にディスパッチされるので、これを気にする必要はなく、複数のパラメータを受け入れることはありません。

testPlayerCollisions()コードに関しては、プレイヤーの衝突を問い合わせる下のリスナーに敵の動きのコードを追加する必要があります。このために、あなたはあなたが動かそうとしている敵をすでに持っているので、あなたはただそのmove()関数またはあなたがそれのために持っているものを呼び出す必要があります。

于 2013-03-24T03:59:47.460 に答える
0

敵のクラスはステージにアクセスできないようです。まだstage.playerを参照しようとしています。メインクラスからステージにアクセスできますが、コンストラクターを介して渡さない限り、他のクラスからはアクセスできません。

ステージを敵のクラスに渡し、それを格納するクラス変数を作成してみてください。すなわち:

private var stageInst:Stage;

public function enemy(s:Stage){
    stageInst = s;   
}

次に、moveEnemy で stageInst.player を使用してプレーヤーのクリップにアクセスします。

敵を作成するときは、メインからステージのインスタンスを渡す必要があります。

すなわち:var e:enemy = new enemy(stage);

于 2013-03-24T08:38:06.910 に答える