繁体   English   中英

动作3比较两个MovieClip

[英]Actionscript 3 compare two MovieClips

我将MovieClips动态添加到DisplayObjectContainer。 其中一些MovieClips遍历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');
            }
        }
    }
}

那么我是在做错什么,应该使用其他方法还是应该添加一个生成用于标识的随机令牌的属性?

我会用!=更改!==,其余代码似乎还可以。

首先,您在创建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");                
}

当然,您始终可以为影片剪辑分配一些唯一的名称,并将其用于比较。

您应将其删除as MovieClip; _holder.getChildAt(i);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM