重新定义对象的hitbox?

时间:2014-11-22 03:34:38

标签: actionscript-3 flash actionscript adobe flash-cs6

所以,我已经创建了一个子弹和鲨鱼列表,这两个列表都包含每个对象的定义数量。在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

1 个答案:

答案 0 :(得分:2)

嗯,是的闪存确实如此,它需要一些时间来正确添加动画片段到舞台。这就是 Event.ADDED_TO_STAGE 存在的原因,请阅读this article以便更好地理解它。

但是我会说你用一个简单的if语句来确保shark和shark.hitto被正确初始化并且坐在舞台上是非常安全的。

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