2011-03-25 13 views
1

私は学校のための簡単な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」チェック:敵と私の舞台を移入する

機能は以下のとおりです。私がクリックした敵だけを取り除くのではなく、ステージ上のすべて。どんな助け?どうもありがとう。

答えて

7

に応じて、getroffen()は、そのクラスを削除しています(thisは現在のスコープオブジェクトを指しています)。だから私はおそらくMainクラスだと推測しています。

あなたのremove関数のように何かをする必要があります。

var man:MovieClip = evt.target as MovieClip; 
man.parent.removeChild(man); 
+0

ありがとうございます。これは正常に動作します。あなたは、Tim Sのコードとの違いについて何か説明できますか?彼のコードはあなたのものよりも優れていると私は理解していますが、どちらもそのトリックを行うようです。 – cabaret

+0

どちらも機能的に同等です。唯一の違いは、 'target'パラメータの代わりに' currentTarget'パラメータ(おそらくはより良い)を使うことです。その違いは、イベントモデルの仕組みと、イベントリスナーの登録先になります。私がしているのは、ターゲットをMovieClipにキャストすることです(ヌルかどうかを確認するためのチェックを追加し、必要ならば返す)し、それを削除するために 'parent'を呼び出します。 'DisplayObject'を別のオブジェクトに追加すると、それはそのオブジェクトの子になり、' parent'パラメータセットがあります。したがって、 'obj.parent.removeChild(obj)'を実行すると簡単に取り除くことができます – divillysausages

+0

'target'と' currentTarget'の違いについては、Flashの 'Event'モデルには3つのステージがあります:捕捉フェーズ、イベントフェーズ、および発泡段階を含む。表示リストのオブジェクトがイベントを送出すると、 'Stage-> parent-> parent-> parent-> child'となります。ここで' child'はイベントを送出したオブジェクトで、 'parent'は各親です' DisplayObject'すべて「ステージ」まで。キャプチャフェーズに入っている最後の「親」まで右に移動します。 「子供」に達すると、私たちはイベントフェーズに入ります。その後、イベントは再び「ステージ」に戻ります。これはバブリングフェーズです – divillysausages

3

代わりのthis.parent.removeChild(this)試み:

evt.currentTarget.parent.removeChild(evt.currentTarget); 

トリックを行う必要があります!

イベント(mouseEvent)は敵の「子」なので、mouseEventのターゲットを削除すると敵が削除されます。

+0

感謝を。それがトリックでした。実際にコードが意味することを説明できますか?私はevt.currentTargetを理解していますが、「親」がどこから来るのかわかりません。残りはまた理解しやすいです。どうもありがとう! – cabaret

+1

私はこの前にこれに答えなかった。 MouseEventの "currentTarget"は、EventListenerを割り当てたオブジェクトです。私はそのオブジェクトを削除したいので、まずそのオブジェクトにアクセスして子供を削除する必要があります。 –

関連する問題