シナリオ: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()