Как я могу выполнить проверку попадания на два динамически добавленных объекта в AS3? - PullRequest
1 голос
/ 23 июля 2011

У меня есть сетка объектов, которые были добавлены на сцену динамически, объекты относятся либо к классу красный, либо к классу синий, как мне выполнить тест на попадание в классы? Я хочу, чтобы синий объект исчез, как только он попадет в красный. Помогите, пожалуйста, если у вас есть видео или ссылка на учебник, который будет оценен. Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 июля 2011

Вы должны использовать комплект обнаружения столкновений

http://code.google.com/p/collisiondetectionkit/

2 голосов
/ 23 июля 2011

Вот ссылка на учебное пособие, а ниже выписка из этого учебного пособия, в которой показан основной принцип:

import flash.events.Event;

this.addEventListener( Event.ENTER_FRAME, handleCollision)

function handleCollision( e:Event ):void
{
    if(circle_mc.hitTestObject(rect_mc))
       {
           output_txt.text = "HIT"
       }
       else
       {
           output_txt.text = "MISS"
       }
}

http://www.designscripting.com/2011/05/hittest-as3-for-collision-detection-flash-actionscript-3/

Что вы хотитеdo, возможно, встраивает этот код выше в свой класс Blue, а затем в основном проверяет, ударили ли вы по какому-либо объекту на сцене, а затем убедитесь, что его тип имеет тип Red или что вы хотите, затем делайте все, что хотите, основываясь нарезультат:

import flash.events.Event;
import mypackage.Red;

this.addEventListener( Event.ENTER_FRAME, handleCollision)

function handleCollision( e:Event ):void
{
    if(stage){
        var i:int = 0;
        for(i; i < stage.numChildren; ++i){
            if(this.hitTestObject(stage.getChildAt(i) && stage.getChildAt(i) != this){
                if(stage.getChildAt(i) is Red){
                   //This object has collided with a Red object
                }
            }
        }
    }        
}

Я просто ударил этот код по макушке, но если он не работает "из коробки", тогда просто используйте базовый принцип и измените его соответствующим образом.Кроме того, наличие множества объектов, одновременно сканирующих все дочерние элементы сцены в каждом кадре, в конечном итоге станет очень сложной задачей и приведет к отставанию вашего приложения.Что было бы более предпочтительно, так это иметь одно событие enter_frame где-нибудь с двумя вложенными циклами for, проверяющими всех потомков, чтобы увидеть, кто с кем сталкивается, или даже лучше структуру связанного списка для объектов Red / Blue и использовать цикл связанного списка для проверки столкновения..

1 голос
/ 23 июля 2011
...