重新定义物体的碰撞箱?

Posted

技术标签:

【中文标题】重新定义物体的碰撞箱?【英文标题】:Redefining the hitbox of objects? 【发布时间】:2015-01-20 07:56:29 【问题描述】:

所以,我创建了一个子弹和鲨鱼列表,这两个列表都包含定义数量的每个对象。在鲨鱼电影剪辑中,我通过创建一个名为 Hitbox 的电影剪辑定义了一个碰撞框,并为其命名为“hitto”

当我测试与 hitto 和子弹的碰撞时,它可以工作,但我得到这个随机输出错误

TypeError: Error #2007: Parameter hitTestObject must be non-null.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at Missile/hitShark()

子弹与鲨鱼的碰撞测试

function hitShark(e:Event ):void 
    for each (bullet in bullets) 
        if (bullet.parent==null) 
            bullets.splice(bullets.indexOf(bullet),1);
         else 

            for each (shark in sharks) 
                if (shark!=null&&bullet.hitTestObject(shark.hitto)) 
                    if (bullet.parent!=null) 
                        bullet.gotoAndPlay(2);
                        shark.health -= 1;
                        shark.gotoAndPlay(2);
                        //Removing while iterating over list causes errors;
                        bullets.splice(bullets.indexOf(bullet),1);
                        trace("HIT");
                    
                
            
        
    

要求我进一步澄清,我是 as3 的新手,所以我的解释可能会令人困惑。

屏幕截图可能有帮助吗? http://prntscr.com/58u6ou

【问题讨论】:

【参考方案1】:

是的,flash 可以做到这一点,它需要一些时间才能将影片剪辑正确添加到舞台。这就是 Event.ADDED_TO_STAGE 存在的原因,请阅读this article 以更好地理解它。

但我想说,使用一个简单的 if 语句确保 Shark 和 Shark.hitto 已正确初始化并位于舞台上会很安全。

if(shark && shark.hitto) 
    // Do collisions

【讨论】:

以上是关于重新定义物体的碰撞箱?的主要内容,如果未能解决你的问题,请参考以下文章

Unity 射线碰撞检测

Unity 射线碰撞检测

游戏开发岗面经总结7(函数调用底层,值捕获和引用捕获,宏定义和内联,排序算法稳定性,static,软工思想,sprite和image的区别,细小物体碰撞问题)

游戏开发岗面经总结7(函数调用底层,值捕获和引用捕获,宏定义和内联,排序算法稳定性,static,软工思想,sprite和image的区别,细小物体碰撞问题)

ue5怎么增添模型碰撞体积

unity