Вот ссылка на учебное пособие, а ниже выписка из этого учебного пособия, в которой показан основной принцип:
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 и использовать цикл связанного списка для проверки столкновения..