如何在Actionscript 3中获取我碰撞的对象?

时间:2011-01-21 06:44:01

标签: flash actionscript-3 graphics collision hittest

有没有办法知道对象正在与哪个对象发生碰撞?...我想在flash中创建一个“box对象”,可以识别与其发生碰撞的任何其他对象(Movieclips)。例如,如果我将框放在“字段”(引擎或世界)上,并且我在其中放置了任何内容,我希望该框能够告诉我它碰撞的是什么类型的对象。我不能使用hitTestObject,因为我不知道该框会提前与哪个对象碰撞。

我希望实现的粗略假设如下:

 if ( Movieclip(parent). UNKNOWN_OBJECT .hitTestObject(this) )
        trace(UNKNOWN_OBJECT.name);

上例中的UNKNOWN_OBJECT不一定具有相同的数据类型。

1 个答案:

答案 0 :(得分:2)

您可以在每一帧迭代父级的所有子级,以查看是否发生了任何冲突。这是一个强力检查,如果你有很多对象来检查碰撞,我建议你看看Quadtrees或类似的东西。

以下是“框对象”如何检查碰撞的示例:

// this is your ENTER_FRAME handler
private function handleEnterFrame(evt:Event):void {
    var p:MovieClip = parent as MovieClip;
    if(!p){
        return;
    }
    for(var i:int = 0, len:int = p.numChildren; i < len; i++){
        var child:DisplayObject = p.getChildAt(i);
        if(child != this && this.hitTestObject(child)){
            trace("Collides with: " + getQualifiedClassName(p.getChildAt(i)));
        }
    }
}

它所做的就是每帧检查与父(即兄弟姐妹)的所有子节点的冲突。检测到碰撞时,它将跟踪与其碰撞的项目的类名称。为了使这个更有用,最好在检测到碰撞时调度一些事件或信号,这样你的类就可以“监听”碰撞。