Проблема с отображаемым объектом AS3 - PullRequest
0 голосов
/ 17 января 2011

Я делаю игру в AS3. Когда я добавляю врага на экран игры, позже я должен удалить его, когда он умрет. Но я продолжаю получать это:

[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

Но я явно добавляю врага на игровой экран. Может ли это быть от прохождения врага через кучу функций или что-то в этом роде?

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Это означает, что вы пытаетесь удалить MovieClip (или Sprite или около того) из DisplayObjectContainer, который не является его родителем.

Вы должны обязательно вызвать метод removeChild () в правом DisplayObjectContainer.

Например:

var myChild:MovieClip = new MovieClip();
var holder:MovieClip = new MovieClip();

holder.addChild(myChild);

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

holder.removeChild(myChild);

Если вы вызываете removeChild() Например, на этапе вы получите сообщение об ошибке, поскольку этап не содержит myChild в качестве дочернего элемента.

Так что дважды проверьте, вызываете ли вы removeChild в правом контейнере.

PS: Пример кода всегда легче отладить

1 голос
/ 17 января 2011

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

     child.parent.removeChild( child );

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

в вашем объектном классе, вы можете сделать следующее ...

    private var container:DisplayObjectContainer;

    public function addToDisplayList( container:DisplayObjectContainer ):void
    {
         this.container = container;
         container.addChild( this );
     }

    public function remove():void
    {
         if( container != null )
             container.removeChild( this );
     }

Тогда вы можете просто сделать это:

   var child:MovieClip = new MyObject();
   child.addToDisplayList( whatever );

   //later...
   child.remove();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...