【问题标题】:How can I get the object I am colliding with in Actionscript 3?如何在 Actionscript 3 中获取我正在碰撞的对象?
【发布时间】:2011-01-21 06:44:00
【问题描述】:

有没有办法知道一个对象与哪个对象发生碰撞?...我想在 Flash 中创建一个“盒子对象”,它可以识别与它碰撞的任何其他对象(电影剪辑)。例如,如果我将盒子放在“场”(引擎或世界)上,然后在里面放任何东西,我希望盒子告诉我它正在与什么样的物体发生碰撞。不能使用hitTestObject,因为我事先不知道盒子会撞到哪个物体。

我想要实现的粗略伪代码如下:

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

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

【问题讨论】:

    标签: flash actionscript-3 graphics collision hittest


    【解决方案1】:

    您可以在每一帧迭代父级的所有子级以查看是否发生任何冲突。这是一个蛮力检查,如果您有很多对象要检查碰撞,我建议您查看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)));
            }
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多