如何在AS3中对两个动态添加的对象进行命中测试?

时间:2011-07-23 00:13:35

标签: flash actionscript-3 hittest

我有一个动态添加到舞台的对象网格,对象是Class Red或Class Blue,我如何在Classes上执行命中测试?我希望蓝色物体在击中红色物体后消失。如果您有视频或指向教程的链接,请提供帮助。感谢。

3 个答案:

答案 0 :(得分:3)

您应该使用碰撞检测套件

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

答案 1 :(得分:2)

以下是教程的链接,以及该教程的摘录,其中显示了基本原则:

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循环,检查所有子项以查看谁与谁发生冲突,或者更好的是Red / Blue对象的链表结构,并使用链表循环来检查冲突

答案 2 :(得分:1)