RemoveChild и Ошибка 2025 - PullRequest
       16

RemoveChild и Ошибка 2025

0 голосов
/ 10 декабря 2010


Я хочу удалить ребенка (фон) через другой класс.Я не могу быть в состоянии предназначаться для этого!Он всегда возвращает мне ноль или ошибку 2025 и прочее ... хе-хе.

У меня есть фон в моем классе creationObjets :

package cem{
    import flash.display.Sprite;

    public class creationBackground extends Sprite{

        public function creationBackground() {
            switch(monterJeu._Difficulte){
                case 0:
                    backgroundFacile();
                    break;
                case 1:
                    backgroundMoyen();
                    break;
                case 2:
                    backgroundDifficile();
                    break;
            }
        }
        private function backgroundFacile():void{
            var backgroundStage:Sprite = new Sprite();
            backgroundStage.graphics.beginFill(0x8FCCA8);
            backgroundStage.graphics.moveTo(0,0);
            backgroundStage.graphics.lineTo(750,0);
            backgroundStage.graphics.lineTo(750,450);
            backgroundStage.graphics.lineTo(0,450);
            backgroundStage.graphics.lineTo(0,0);
            backgroundStage.graphics.endFill();

            this.addChild(backgroundStage);
        }
        private function backgroundMoyen():void{
            var backgroundStage:Sprite = new Sprite();
            backgroundStage.graphics.beginFill(0x8F3378);
            backgroundStage.graphics.moveTo(0,0);
            backgroundStage.graphics.lineTo(750,0);
            backgroundStage.graphics.lineTo(750,450);
            backgroundStage.graphics.lineTo(0,450);
            backgroundStage.graphics.lineTo(0,0);
            backgroundStage.graphics.endFill();

            this.addChild(backgroundStage);
        }
        private function backgroundDifficile():void{
            var backgroundStage:Sprite = new Sprite();
            backgroundStage.graphics.beginFill(0x233378);
            backgroundStage.graphics.moveTo(0,0);
            backgroundStage.graphics.lineTo(750,0);
            backgroundStage.graphics.lineTo(750,450);
            backgroundStage.graphics.lineTo(0,450);
            backgroundStage.graphics.lineTo(0,0);
            backgroundStage.graphics.endFill();

            this.addChild(backgroundStage);
        }
    }
}

public static var _creationBackground:creationBackground = new creationBackground();

ниже, я добавляю его:

addChild(_creationBackground);

тогда я хочу удалить его из другого класса actionObjets !Как я могу добраться до моего фона?Я пытался

creationObjets._creationBackground.parent.removeChild(creationObjets._creationBackground);

removeChild(creationObjets._creationBackground);

Я действительно понятия не имею, как получить к нему доступ *

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Достаточно одного из следующих:

creationObjets.removeChild(creationObjet.getChildAt(0));

или

creationObjets.removeChild(creationObjet.getChildByName("creationBackground"));

или

creationObjets.removeChildAt(0);

Когда вы используете removeChildAt () или getChildAt (), вы должны указать индексную позицию экранного объекта (которую вы хотите получить или удалить). Позиция индекса - это позиция экранного объекта в списке отображения контейнера экранных объектов (я предположил, что его значение равно 0).

Также при использовании getChildByName () вы должны указать имя экранного объекта, который хотите получить. Обратите внимание, что сначала вы должны установить свойство name экранного объекта.

Вот рабочий пример, основанный на вашем flash-приложении / фильме:

package
{
    import cem.CreationObjet;
    import cem.ActionObjet;
    import flash.display.MovieClip;

    public class Main extends MovieClip
    {
        public function Main():void
        {
            init();

        }// end function

        private function init():void
        {
            var creationObjet:CreationObjet = new CreationObjet();
            addChild(creationObjet);

            var actionObjet:ActionObjet = new ActionObjet(creationObjet);

        }// end function

    }// end class

}// end package

В классе документа Main сначала импортируются CreationObjet и ActionObjet. Затем экземпляр CreationObjet объявляется, создается и добавляется на сцену. Наконец, экземпляр ActionObjet объявляется, создается и экземпляр CreationObjet анализируется как единственный аргумент.

package cem
{
    import cem.CreationBackground;
    import flash.display.Sprite;

    public class CreationObjet extends Sprite
    {
        private var _creationBackground:CreationBackground;

        public function CreationObjet():void
        {
            _creationBackground = new CreationBackground();
            addChild(_creationBackground);

        }// end function

    }// end class

}// end package

В классе CreationObjet экземпляр CreationBackground добавляется в экранный объект CreationObjet.

package cem
{
    import cem.CreationObjet;

    public class ActionObjet
    {
        private var _creationObjet:CreationObjet;

        public function ActionObjet(p_creationObjet:CreationObjet):void
        {
            _creationObjet = p_creationObjet;

            _creationObjet.removeChild(_creationObjet.getChildAt(0));
            // or _creationObjet.removeChild(_creationObjet.getChildByName("creationBackground"));
            // or _creationObjet.removeChildAt(0);

        }// end function

    }// end class

}// end package

Наконец, в классе ActionObjet экранный объект CreationBackground удаляется из CreationObjet.

Мне пришлось сделать кучу предположений о вашем flash-приложении / фильме, но это должно дать вам общее представление о том, как реализовать то, что я предложил ранее.

Я надеялся, что это помогло:)

0 голосов
/ 10 декабря 2010

Я не уверен, правильно ли я понимаю вашу проблему, но:

Помните, что для удаления ребенка вам необходим доступ к детской сцене. Если ваш класс actionObjects является Movieclip или sprite, он будет иметь переменную только для чтения, которая будет ссылаться на стадию (которая может совпадать или не совпадать с стадией, которую вы добавили также _creationBackground).

Так, например:

stage.removeChild(_creationBackground);

Должно работать нормально, если actionObjets имеет ту же стадию, что и везде, где вы добавили _creationBackground.

Если actionObjets не имеет ту же стадию или вообще не имеет ее (возможно, это не спрайт или мувиклип?) Вы можете перейти на стадию, где был добавлен _creationBackground.

IE:

пакет {

import flash.display.Stage;

public class actionObjets {

    private var myStage:Stage;

    public function actionObjets(s:Stage) {
        myStage = s;
    }
}

}

, а затем попробуйте:

 myStage.removeChild(_creationBackground);

Это, конечно, при условии, что у вас есть доступ к клипу _creationBackground внутри actionObjets.

Не уверен, что это решило вашу проблему или нет, удачи.

...