【问题标题】:How can I do a hit test on two dynamically added objects in AS3?如何在 AS3 中对两个动态添加的对象进行命中测试?
【发布时间】:2011-07-23 00:13:35
【问题描述】:

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

【问题讨论】:

  • 以下答案之一对您有用吗?
  • 为什么不能只使用 hitTestObject?您可能需要发布一些代码来阐明“动态”的含义,因为,我通常会说,如果您想在两个对象之间进行命中测试,请使用 hitTest

标签: flash actionscript-3 hittest


【解决方案1】:

您应该使用碰撞检测套件

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

【讨论】:

  • 谢谢@papachan!我要试试这个
【解决方案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 循环检查所有子项以查看谁与谁发生冲突,或者甚至更好的红/蓝对象的链表结构并使用链表循环检查冲突.

【讨论】:

  • 谢谢,我想这和我上面说的一样,我要对动态添加到舞台的对象进行命中测试。
  • 对不起,我才看到你写的,我试试第二部分,再次感谢!
  • 此代码将获取循环运行时舞台上的所有对象。因此,如果您已动态添加对象,则下次循环运行时,将捕获这些对象。这是因为循环会根据添加的子节点数量遍历舞台的每个直接子节点 (stage.getChildAt(i)),每次静态或动态添加对象时都会递增。
  • 底层代码在class文件中不能和stage一起使用,应该用parent替换
【解决方案3】:

【讨论】:

  • 感谢@gladoscc,但我认为这仅适用于已经在舞台上且具有实例名称的对象。我如何对动态添加到舞台的对象进行命中测试。
  • 你可以有一个红色数组和另一个蓝色数组,然后循环一个数组并测试另一个数组。这就是我会做的。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多