1

私はfpsゲームに取り組んでいます。ゲームには複数の敵が含まれています。しかし、敵と同じムービークリップを呼び出しています。そのムービークリップは発火イベントをディスパッチし、プレイヤーの寿命を縮めます。しかし、どのムービークリップがイベントをディスパッチしているかを知る必要があります。敵をランダムに追加しました。発砲したばかりの敵の位置を知る必要があります。役立つコードをいくつか紹介します...

dispatchEvent(new Event('Enemy_Fired')); // this event is dispatching from enemy movieclip

this.addEventListener('Enemy_Fired',ReduceLife);


    public function ReduceLife(e:Event){
        life--;
        var currentLife:int = life * lifeRatio;
        if(life<1){
            Game_Over();
            //game_completed();
        } else {
            sview.playerhit.gotoAndPlay(2);
            sview.lifebar.gotoAndStop(100 - currentLife);
            sview.health.text = String(currentLife);
        }
//Here i need to know this event dispatched from which enemy
    }

前もって感謝します

4

1 に答える 1

4

以下を使用して、イベントをディスパッチしたオブジェクトへの参照を取得できます。

e.target

このコード行に見られるように、親がイベントをディスパッチしているようです。

dispatchEvent(new Event('Enemy_Fired')); // this event is dispatching from enemy movieclip

dispatchEvent は this.dispatchEvent と同じであるため、ルート クラスがイベントをディスパッチしていることを意味します。

これに変更する必要があります yourEnemyMovieClip.dispatchEvent(new Event('ENEMY_FIRED',true,false);

Event の bubble プロパティを true に、cancelable を false に設定していることに注意してください。バブルとは、イベントがディスプレイ チェーンでバブルアップすることを意味します。イベントをディスパッチしたムービークリップよりも 1 レベル高いルート クラスでイベントをリッスンしているため、これは重要です。

ここで Event クラスのコンストラクターを参照してください: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html

イベントリスナーに次を追加します

 e.stopImmediatePropagation();

これにより、イベントがディスプレイチェーンの上位にバブリングするのを防ぎ、アプリケーションのパフォーマンスを節約できます。

于 2012-12-25T22:49:55.797 に答える