У меня есть сетка объектов, которые были добавлены на сцену динамически, объекты относятся либо к классу Red, либо к классу Blue, как мне выполнить проверку попаданий по классам? Я хочу, чтобы синий объект исчезал, как только он попадал в красный. Помогите, пожалуйста, если у вас есть видео или ссылка на учебник, который был бы признателен. Спасибо.
Как я могу проверить попадание двух динамически добавленных объектов в AS3?
Ответы (3)
Вы должны использовать комплект обнаружения столкновений
http://code.google.com/p/collisiondetectionkit/
Вот ссылка на учебник, а ниже выдержка из этого руководства, которая показывает основной принцип:
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/
То, что вы собираетесь сделать, это, возможно, встроить этот код выше в ваш класс 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, проверяющими всех дочерних элементов, чтобы увидеть, кто с кем сталкивается, или, что еще лучше, структуру связанного списка для красных/синих объектов и использовать цикл связанного списка для проверки столкновения .
http://www.foundation-flash.com/tutorials/as3hittesting/