场景:在 Main 中,Bullet 类的实例被生成并添加到舞台,而到数组 bltarray 中,Enemy 类的实例被生成,添加到舞台并添加到 nmearray。这工作正常。
问题似乎是偶然出现的,即它可以工作,然后很快就突然不起作用,当它不起作用时,我收到输出错误的垃圾邮件并且分数显示不断上升,注意它是子弹和敌人的同一个实例。
Bullet instance98 hit Enemy instance45
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at Main/everyframe()
Bullet instance98 hit Enemy instance45
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at Main/everyframe()
我不明白的是,
我正在使用的代码如下(也在主代码中)
for (var j=0;j<bltarray.length;j++){
if (bltarray[j].hitTestObject(nmearray[i])){
trace("Bullet "+bltarray[j].name+" hit Enemy "+nmearray[i].name);
score += 1;
scorevalue.text = score.toString();
// Remove dead objects from stage
stage.removeChild(nmearray[i]);
stage.removeChild(bltarray[j]);
// Remove reference to objects from array
nmearray.splice(i,1);
bltarray.splice(j,1);
trace('nmearray length:'+nmearray.length)
}
}
子弹和敌人类都有自己的 REMOVED_FROM_STAGE 事件侦听器来删除其他事件侦听器。
当我这样做时,这个错误也会偶尔弹出。
TypeError: Error #2007: Parameter hitTestObject must be non-null.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at Main/everyframe()