Ошибка «Указанный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне» - PullRequest
0 голосов
/ 01 апреля 2012

С этим боролись в нескольких проектах. Я пытаюсь порождать врагов во флэш-игре и выполнять очистку, удаляя из-за границы врагов.

Вот как:

врага-массив содержит ссылки на порожденные вражеские объекты. evilLayer - это видеоклип, в котором содержатся появившиеся враги.

  public function spawnEnemy():void
  {

    var mc:MovieClip = new Enemy();
    enemyLayer.addChild(mc);
    enemyArray.push(mc);


     for (var i:int = 0; i<=enemyArray.length-1;i++)
     {
        enemyArray[i].z-=30; //Moves the enemies

        if (enemyArray[i].z <=-400) //performs cleanup
        {

                    enemyLayer.removeChild(enemyArray[i]);
        }

     }

   }

Но я получаю эту ошибку

Поставляемый объект DisplayObject должен быть дочерним по отношению к вызывающей стороне

Что я делаю не так?

Я пробовал: также удалить removeChild (врага-массив [i]), удалив ссылку на слой врага, но получаю ту же ошибку.

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Убедитесь, что вы удалили свои элементы из массива после того, как удалили их из списка отображения

    if (enemyArray[i].z <=-400) //performs cleanup
    {

                enemyLayer.removeChild(enemyArray[i]);
                enemyArray.splice(i, 1);//removing enemyArray[i] from the manager array
    }
0 голосов
/ 01 апреля 2012

Это не решило бы его проблему, Инженер, потому что если «каким-то образом» мувиклип, который нужно удалить, существует, но в другом контейнере, он не будет удален.Я бы предложил сделать следующее:

enemyArray[i].parent.removeChild(enemyArray[i]);

Хотя это не лучший способ сделать это, и это довольно плохой код, он помогает мне каждый раз, когда у меня возникает такая проблема.

РЕДАКТИРОВАТЬ:Проблема в том, что вы не модифицируете свой объект массива.Вы просто добавляете врагов, но никогда не удаляете их.Вот почему вы получаете эту ошибку.Массив содержит врага, который уже удален из списка отображения.

...