2012-03-23 15 views
0

MovieClipsをDisplayObjectContainerに動的に追加します。これらのMovieClipsの一部は、重力と衝突をチェックするためにDisplayObjectContainerのすべての子をループします。しかし、現在の子が呼び出し元のMovieClipと等しくないかどうかを確認すると、その型だけをチェックするようです。Actionscript 3 2つのムービークリップを比較する

基本的に、MovieClipの等価性をチェックすると、タイプのみをチェックするようです。

Main.as:

var planet:Planet = new Planet(holder); 
planet.x = 0; 
planet.y = 0; 
planet.spawn(); 

var planet2:Planet = new Planet(holder); 
planet2.x = 50; 
planet2.y = 50; 
planet2.spawn(); 

Planet.as:

public class Planet { 
    public var x:Number = 0; 
    public var y:Number = 0; 

    private var _holder:DisplayObjectContainer; 
    private var _mc:MovieClip; 

    public function Planet(holder:DisplayObjectContainer) { 
     _holder = holder; 

     _mc = new PlanetMovieClip(); 
     _mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
    } 

    public function spawn():void { 
     _holder.addChild(_mc); 
    } 

    private function enterFrameHandler(evt:Event):void { 
     for(var i:int = 0; i < _holder.numChildren; i++) { 
      var child:MovieClip = _holder.getChildAt(i) as MovieClip; 

      // the other planet never passes this check 
      if(child !== _mc) { 
       trace('child is not the same'); 
      } 
     } 
    } 
} 

は、だから私は、何か間違ったことをやっている私は他の方法にアプローチすべきか、私はランダムに生成プロパティを追加する必要があります識別のために使用されるトークン?

+0

as MovieClip;を削除する必要があります;' '_holder.getChildAt(I)中;' – mgraph

+0

はこれが何を行うことになっています: 'VARの惑星:惑星(ホルダー);'? – weltraumpirat

+0

@mgraphそれはちょっとした作品です。あなたのコメントのために私は間違ったアプローチを使用していることに気付きました!ありがとう!あなたのコメントを答えとして追加すると、私は実際に自分の問題を解決したので正しい答えとして設定します;) –

答えて

0

あなたがムービークリップとして `削除する場合はどのような_holder.getChildAt(i);

+0

これはどのように役立ちますか? – loxxy

+0

@loxxy私はそれをコメントとして書きました。「ティム・S.」は役に立ちました。 – mgraph

+0

ああ...気付かなかった。ごめんなさい。 – loxxy

0

私は変わります!==!= 残りのコードは大丈夫です。

+0

私はそれを試みたが、うまくいかなかった。とにかくおかげです。 –

0

まず、Planetムービークリップを作成するためのコードに誤りがあります。

それは

var planet:Planet = new Planet(holder); 
    planet.x = 0; 
    planet.y = 0; 
    planet.spawn(); 

    var planet2:Planet = new Planet(holder) 
    planet2.x = 50; 
    planet2.y = 50; 
    planet2.spawn(); 

あなたはPlanet.asにnullを確認しましたすべきですか?

if(child!=null) { 
    if(child !== _mc) 
     trace('child is not the same'); 
    else 
     trace("child same");     
} 

もちろん、ムービークリップには一意の名前を付けて比較することができます。

+0

最初のことは、基本的にここに投稿するスクリプトを書き直す際のタイプミスでした。私はそれを編集しました。しかし、MovieClipのnullをチェックしても問題は解決しません。とにかくありがとう –

+0

ムービークリップに一意の名前を割り当てて確認しましたか? –

関連する問題