Actionscript 3比较两个MovieClip

时间:2012-03-23 09:10:30

标签: actionscript-3 flash

我动态地将MovieClip添加到DisplayObjectContainer。其中一些MovieClip遍历DisplayObjectContainer的所有子节点以检查引力和碰撞。但是,当我检查当前子节点是否与调用者MovieClip不相等时,它似乎只检查类型。

所以基本上,当我检查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');
            }
        }
    }
}

我做错了什么,我应该接近其他方法还是应该添加一个生成用于识别的随机令牌的属性?

3 个答案:

答案 0 :(得分:0)

我会改变!== with!= 其余代码似乎没问题。

答案 1 :(得分:0)

首先,您在创建Planet movieclip的代码中有错误。

应该是

    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");                
}

当然,您总是可以为影片剪辑指定一些独特的名称,并将其用于比较。

答案 2 :(得分:0)

您应该删除as MovieClip;

中的_holder.getChildAt(i);