重新定义物体的碰撞箱?
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
【讨论】:
以上是关于重新定义物体的碰撞箱?的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发岗面经总结7(函数调用底层,值捕获和引用捕获,宏定义和内联,排序算法稳定性,static,软工思想,sprite和image的区别,细小物体碰撞问题)
游戏开发岗面经总结7(函数调用底层,值捕获和引用捕获,宏定义和内联,排序算法稳定性,static,软工思想,sprite和image的区别,细小物体碰撞问题)