2012-03-23 59 views
0

我动态地将MovieClip添加到DisplayObjectContainer。其中一些影片剪辑循环遍历DisplayObjectContainer的所有子项以检查引力和碰撞。虽然,当我检查当前孩子是否与调用者MovieClip不相等时,它似乎只检查类型。Actionscript 3比较两个影片剪辑

所以基本上,当我检查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 2012-03-23 09:26:01

+0

这是什么应该做的:'VAR星球:星球(持有人);'? – weltraumpirat 2012-03-23 09:27:41

+0

@mgraph有点有用。由于您的评论,我意识到我正在使用错误的方法!谢谢!如果您将您的评论添加为答案,我会将其设置为正确答案,因为它实际上解决了我的问题;) – 2012-03-23 10:01:32

回答

0

你应该_holder.getChildAt(i);

+0

这有什么帮助? – loxxy 2012-03-23 10:55:58

+0

@loxxy我把它作为评论,'蒂姆S.'说,这是有帮助 – mgraph 2012-03-23 10:58:22

+0

哦......没有注意到。抱歉。 – loxxy 2012-03-23 11:06:14

0

我会改变!==与!= 你的代码的其余部分似乎没问题。

+0

我试过,但没有工作。无论如何,请继续致谢 – 2012-03-23 09:24:47

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检查空?

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

而且,您可以随时为影片剪辑指定一些独特的名称,并将其用于比较。

+0

第一件事是在重写脚本以在这里发布的基本错误。我编辑过它。但检查null为MovieClip仍然不能解决我的问题。无论如何感谢 – 2012-03-23 09:56:35

+0

你是否尝试给电影剪辑分配一个唯一的名称并检查它? – 2012-03-23 10:16:42

相关问题