求めすぎて申し訳ありませんが、今では混乱しすぎています。私は AS3 で甥のためにこの本当にシンプルなシューティング ゲームを作っています。ゲームが起動されるたびに 2 回または 3 回ポップアップし続ける 1 つの本当に厄介なエラーを除いて、すべて正常に動作しているようです。
問題はError #1009: Cannot access a property or method of a null object reference.
常にparent.removeChild(this)
、関連するクラス ( EnemyClass
、BulletClass
またはMissileClass
) のコマンドにあります。これは 2 つのケースで発生します。checkFinishConditions
メソッド inMain
が呼び出され、EnemyClass インスタンスを削除する必要がある場合です。#1009 エラーが発生した場合、これはインスタンスが既に削除されていることを意味しますか? 2 番目の状況は、がクラスinst.hitTestObject(enemyInstance)
でチェックインされたときです。Main
これは、EnemyClass インスタンスが何らかの形で既に削除されているということですか? 正直なところ、私はここで完全に迷っています。
private function checkCollision():void
{
//loop through missiles
for (var i:int = 0; i < aMissileArray.length; i++) {
//get the current missile
var currentMissile:missileClass = aMissileArray[i];
//loop through enemies
for (var j:int = 0; j < aEnemyArray.length; j++) {
var thisEnemy:EnemyClass = aEnemyArray[j];
if (currentMissile.hitTestObject(thisEnemy)) {
var thisExplode:ExplosionClass = new ExplosionClass(thisEnemy.x,thisEnemy.y);
addChild(thisExplode);
currentMissile.destroyThis();
aMissileArray.splice(i,1);
thisEnemy.deleteEnemy();
aEnemyArray.splice(j, 1);
aDamageArray.splice(j, 1);
scoreValueText += 1;
j--;
i--;
}
//break;
}
}
//loop through bullets
for (var l:int = 0; l < aBulletArray.length; l++) {
//get the current missile
var currentBullet:BulletClass = aBulletArray[l];
//loop through enemies
for (var k:int = 0; k < aEnemyArray.length; k++) {
var currentEnemy:EnemyClass = aEnemyArray[k];
if (currentBullet.hitTestObject(currentEnemy)) {
currentBullet.destroyThis();
aBulletArray.splice(l, 1);
aDamageArray[k] -= 1;
l--;
if (aDamageArray[k] < 1) {
//create an explosion
var thisBulletExplode:ExplosionClass = new ExplosionClass(currentEnemy.x,currentEnemy.y);
addChild(thisBulletExplode);
currentEnemy.deleteEnemy();
aEnemyArray.splice(k, 1);
aDamageArray.splice(k, 1);
scoreValueText += 1;
k--;
}
break;
}
}
}
}