2011-01-16 6 views
0

私はAS3でゲームを作っています。私はゲーム画面に敵を追加すると、後で私は死ぬときにそれを削除する必要があります。しかし、私はこれを続けています:AS3ディスプレイオブジェクトの問題

[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. 

しかし、私は明らかにゲームスクリーンに敵を追加します。これは、敵を何かの機能や何かに通すことではないでしょうか?

答えて

1

タイムラインを扱うとき、それはあなたが常にオブジェクトの親プロパティからメソッドを呼び出すことができ、その場合には、オブジェクトのスコープを追跡することが困難な場合がありますをデバッグする方が簡単です。あなたには、いくつかの理由でFlashDevelopの&でコーディングしている場合にはしたくないか、親を追跡することはできません

 child.parent.removeChild(child); 

、あなたがディスプレイから、あなたのオブジェクトを追加および削除する方法のカップルを実装することができリスト、事実上

private var container:DisplayObjectContainer; 

    public function addToDisplayList(container:DisplayObjectContainer):void 
    { 
     this.container = container; 
     container.addChild(this); 
    } 

    public function remove():void 
    { 
     if(container != null) 
      container.removeChild(this); 
    } 

...あなたは次のことを行うことができ、あなたのオブジェクトクラスで

...オブジェクトに削除&を追加する委任その後、あなたは、単にこれを行うことができます。

var child:MovieClip = new MyObject(); 
    child.addToDisplayList(whatever); 

    //later... 
    child.remove(); 
+1

もしあなたが(child.parent)child.parent.removeChild ....を完全に安全であると言うこともできます。それはおそらくOPの問題を解決するでしょうが、このタイプのコードを使用することは非常に拡張性がないことに言及する必要があります。おそらくゲームの長期的な問題を引き起こすでしょう。 OPはなぜ彼/彼女のオブジェクトの親が彼らが思うものでないのかを理解しなければならない。 – Roy

+0

私は全く同意しますが、これは範囲の問題のために私が通常はアドバイスしていないタイムラインの文脈にあると言いました...私はOPの問題が本当に起こらないような外部のクラスでのコーディングが大好きです。個人的には、100%安全であるために、私はif(child.parent!= null)表記を好みます:) – PatrickS

+0

hmm私はこれを試してみますが、私はタイムラインでコーディングしていません。奇妙な... – alex

2

これは、親ではないDisplayObjectContainerからMovieClip(またはSpriteなど)を削除しようとしていることを意味します。

右のDisplayObjectContainerでremoveChild()メソッドを呼び出す必要があります。例えば

:あなたは子供を削除したいとき

var myChild:MovieClip = new MovieClip(); 
var holder:MovieClip = new MovieClip(); 

holder.addChild(myChild); 

はそうあなたがホルダ上のremoveChildメソッドを呼び出す必要があります。

holder.removeChild(myChild); 

あなたは、ステージ自体の子としてはmyChildを保持していないので、あなたがエラーを取得しますインスタンスのステージ上でのremoveChild()を呼び出した場合。

右のコンテナでremoveChildを呼び出すかどうかを再度確認します。

PS:サンプルコードは常に

関連する問題