所以,我已经创建了一个子弹和鲨鱼列表,这两个列表都包含每个对象的定义数量。在shark movieclip里面,我通过创建一个名为Hitbox的动画片段定义了一个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
答案 0 :(得分:2)
嗯,是的闪存确实如此,它需要一些时间来正确添加动画片段到舞台。这就是 Event.ADDED_TO_STAGE 存在的原因,请阅读this article以便更好地理解它。
但是我会说你用一个简单的if语句来确保shark和shark.hitto被正确初始化并且坐在舞台上是非常安全的。
if(shark && shark.hitto) {
// Do collisions
}