私は学校のための簡単なFlashゲームで作業しています。 1つのレベルでは、複数の敵が出現し、プレイヤーはそれらを撃つことになっています。私はremoveChild()を使ってショットをした敵を取り除きましたが、私が敵をクリック(ヒット)するとステージ上のすべてが削除されます。それは完全に空白になります。それは削除理由として、ここで混乱しのAS3 - removeChild()はステージからすべてを削除します
public function getroffen(evt:MouseEvent):void{
trace("hit");
this.parent.removeChild(this);
}
種類:敵が当たった場合
private function Game2():void{
for (var i:uint=0; i<50; i++) {
var man:MovieClip = new man_mc();
man.x=Math.random()*750;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);
man.addEventListener(MouseEvent.CLICK, getroffen);
}
関数「getroffen」チェック:敵と私の舞台を移入する
機能は以下のとおりです。私がクリックした敵だけを取り除くのではなく、ステージ上のすべて。どんな助け?どうもありがとう。
ありがとうございます。これは正常に動作します。あなたは、Tim Sのコードとの違いについて何か説明できますか?彼のコードはあなたのものよりも優れていると私は理解していますが、どちらもそのトリックを行うようです。 – cabaret
どちらも機能的に同等です。唯一の違いは、 'target'パラメータの代わりに' currentTarget'パラメータ(おそらくはより良い)を使うことです。その違いは、イベントモデルの仕組みと、イベントリスナーの登録先になります。私がしているのは、ターゲットをMovieClipにキャストすることです(ヌルかどうかを確認するためのチェックを追加し、必要ならば返す)し、それを削除するために 'parent'を呼び出します。 'DisplayObject'を別のオブジェクトに追加すると、それはそのオブジェクトの子になり、' parent'パラメータセットがあります。したがって、 'obj.parent.removeChild(obj)'を実行すると簡単に取り除くことができます – divillysausages
'target'と' currentTarget'の違いについては、Flashの 'Event'モデルには3つのステージがあります:捕捉フェーズ、イベントフェーズ、および発泡段階を含む。表示リストのオブジェクトがイベントを送出すると、 'Stage-> parent-> parent-> parent-> child'となります。ここで' child'はイベントを送出したオブジェクトで、 'parent'は各親です' DisplayObject'すべて「ステージ」まで。キャプチャフェーズに入っている最後の「親」まで右に移動します。 「子供」に達すると、私たちはイベントフェーズに入ります。その後、イベントは再び「ステージ」に戻ります。これはバブリングフェーズです – divillysausages