Actionscript 3 сравнить два мувиклипа - PullRequest
0 голосов
/ 23 марта 2012

Я динамически добавляю мувиклипы в 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');
            }
        }
    }
}

Итак, я делаю что-то не так, я должен подойти к другому методу или просто добавить свойство, которое генерируетслучайный токен, используемый для идентификации?

Ответы [ 3 ]

0 голосов
/ 23 марта 2012

Прежде всего у вас есть ошибка в коде, который вы дали для создания мувиклипа Планеты.

должно быть

    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 голосов
/ 23 марта 2012

вы должны удалить as MovieClip; в _holder.getChildAt(i);

0 голосов
/ 23 марта 2012

Я бы изменился! == с! = Остальная часть вашего кода выглядит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...