Ошибка AS3 № 1009 (removeChild просто не работает??)

Это небольшой фрагмент из небольшой флеш-игры, над которой я работаю:

Этот бит из моего класса GamePlayScreen:

public function handleKeyboard(e:KeyboardEvent):void {
        if(e.type == KeyboardEvent.KEY_DOWN && e.keyCode == Keyboard.ENTER) {
            var enemy:EnemyShip = new EnemyShip();
            enemyships.push(enemy);
            addChild(enemyships[enemyships.length-1]);
        }
    }

и этот бит вызывает ошибку (я отметил строку *)

for each (var enemy:EnemyShip in Game.gameplay.enemyships) {
            if(this.hitTestObject(enemy)) {
                *enemy.parent.removeChild(enemy);
            }

game — это экземпляр GamePlayScreen, объявленный в моем классе документа Game. Я уже проследил вражеский.родитель, и он сказал мне, что это [Object GamePlayScreen], но ошибка говорит мне, что это null?

Это ошибка:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Laser1/moveUp()[C:\Dev\Projects\Gamedev\Flash\classes\Laser1.as:23]

Я пробовал все, отслеживая каждую строку, и до сих пор никаких результатов ... Даже когда я использую

if(Game.gameplay.contains(enemy) {
    enemy.parent.removeChild(enemy);
}

он продолжает снова натыкаться на эту ошибку... я не знаю...


person xirb22    schedule 18.06.2012    source источник


Ответы (1)


Простым решением может быть проверка того, не равно ли значение null и у врага все еще есть родитель.

for each (var enemy:EnemyShip in Game.gameplay.enemyships) {
  if(enemy && enemy.parent && this.hitTestObject(enemy)) {
    enemy.parent.removeChild(enemy);
  }
}
person Florian Salihovic    schedule 18.06.2012
comment
Я не знаю почему, но это исправило... Я сделал почти то же самое, отследив противника и врага.родителя с помощью этого предложения if, и они оба вернули что-то отличное от нуля. В любом случае большое спасибо! - person xirb22; 18.06.2012