如果要求太多,我很抱歉,但我现在太困惑了。我正在为我在 AS3 中的侄子制作这款非常简单的射击游戏。一切似乎都运行良好,除了一个非常烦人的错误,在游戏启动时每隔一秒或第三次就会弹出一个。
IT 是Error #1009: Cannot access a property or method of a null object reference.
问题始终出parent.removeChild(this)
在相关类(EnemyClass
或BulletClass
)MissileClass
中的命令上。这发生在两种情况下:当调用checkFinishConditions
方法 inMain
并且需要删除 EnemyClass 实例时。因此,如果我收到 #1009 错误,这是否意味着该实例已被删除?第二种情况是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;
}
}
}
}