1

我有一个动态添加到舞台的对象网格,对象是红色类或蓝色类,我如何对这些类执行命中测试?我希望蓝色物体在碰到红色物体后消失。请帮助,如果您有视频或教程链接,将不胜感激。谢谢。

4

3 回答 3

3

这是教程的链接,下面是该教程的摘录,显示了基本原理:

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

于 2011-07-23T00:22:34.587 回答
3

您应该使用碰撞检测套件

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

于 2011-07-23T00:17:10.670 回答
1

http://www.foundation-flash.com/tutorials/as3hittesting/

于 2011-07-23T00:20:26.003 回答