RemoveChild和Error 2025

时间:2010-12-10 00:11:43

标签: actionscript-3 null


我想通过另一个班级删除一个孩子(背景)。我似乎无法瞄准它!它总是返回null或错误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 :(得分:0)

我不确定我是否理解你的问题但是:

请记住,为了移除孩子,您需要访问孩子的舞台。如果你的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);

当然,假设您可以访问actionObjets中的_creationBackground剪辑。

不确定这是否解决了您的问题, 祝你好运。

答案 1 :(得分:0)

以下任何一项都应该足够:

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应用/电影做出一系列假设,但这应该让你大致了解如何实现我之前建议的内容。

我希望这有助于:)