Как я могу получить объект, с которым я сталкиваюсь в Actionscript 3? - PullRequest
0 голосов
/ 21 января 2011

Есть ли способ узнать, с каким объектом сталкивается объект? ... Я хочу во флеш-памяти создать «коробочный объект», который может идентифицировать любой другой объект (мувиклипы), который сталкивается с ним.Например, если я опускаю прямоугольник на «поле» (движок или мир) и помещаю в него что-нибудь, я бы хотел, чтобы блок сообщал мне, с каким объектом он сталкивается.Я не могу использовать hitTestObject, потому что я не знаю, с каким объектом заранее столкнется окно.

Грубый псевдокод того, чего я хочу достичь, выглядит следующим образом:

 if ( Movieclip(parent). UNKNOWN_OBJECT .hitTestObject(this) )
        trace(UNKNOWN_OBJECT.name);

UNKNOWN_OBJECT в приведенном выше примере не обязательно имеет тот же тип данных.

1 Ответ

2 голосов
/ 21 января 2011

Вы можете выполнить итерацию по всем дочерним элементам родителя в каждом кадре, чтобы увидеть, происходит ли какое-либо столкновение. Это проверка грубой силы, и если у вас есть много объектов для проверки столкновений, я предлагаю вам изучить Quadtrees или что-то подобное.

Вот пример того, как ваш «объект-бокс» может проверять столкновения:

// this is your ENTER_FRAME handler
private function handleEnterFrame(evt:Event):void {
    var p:MovieClip = parent as MovieClip;
    if(!p){
        return;
    }
    for(var i:int = 0, len:int = p.numChildren; i < len; i++){
        var child:DisplayObject = p.getChildAt(i);
        if(child != this && this.hitTestObject(child)){
            trace("Collides with: " + getQualifiedClassName(p.getChildAt(i)));
        }
    }
}

Все, что он делает, это проверяет столкновения со всеми дочерними узлами родителя (то есть братьев и сестер) в каждом кадре. При обнаружении столкновения он будет отслеживать имя класса элемента, с которым столкнулся. Чтобы сделать это более полезным, было бы неплохо отправить какое-либо Событие или Сигнал во время обнаружения коллизии, чтобы ваши классы могли «прослушивать» коллизии.

...