0

我有一个来自我的图书馆的电影剪辑“achtergrond”,我把它放在舞台上,功能如下:

function set_game ()
        {
            oefNr = 4;
            var bg:achtergrond = new achtergrond();
            bg.x = 0;
            bg.y = 0;
            bg.name = "bg";
            bg.gotoAndStop ("uit");
            addChild (bg);
            set_next ();
        }

影片剪辑包含 2 帧“aan”和“uit”,它从帧“uit”开始。在我的游戏中,我想在播放声音时将帧设置为“aan”,如下所示:

    function playSnd ():void
    {
        getChildByName("bg").gotoAndStop("aan");
        snd = new Sound(new URLRequest("phonetic_" + curArr[curSnd] + ".mp3"));
        cnl = snd.play();
        cnl.addEventListener (Event.SOUND_COMPLETE, completeSnd);
    }

但是对于我的生活,我找不到正确的方法来做到这一点。Flash 一直在讨论 displayObjects 和其他事情,我不知道为什么我不能处理我的影片剪辑。实际上,我有一个线索,但仅此而已。我还不太了解 Flash 的这一部分。

4

2 回答 2

0

答案是,如果我尝试像这样访问我的剪辑: this["bg"] 或 getChildByName("bg") 我指的是DisplayObject。这没有MovieClip的所有方法,就像我在这种情况下需要的gotoAndStop一样。

我声明了一个新变量:

var movie:MovieClip;

然后我将 DisplayObject 转换为 MovieClip 并将其放入 var movie 中

function set_game ()
        {
            oefNr = 4;
            var bg:achtergrond = new achtergrond();
            bg.x = 0;
            bg.y = 0;
            bg.name = "bg";
            bg.gotoAndStop ("uit");
            addChild (bg);
            movie = this.getChildByName("bg") as MovieClip;
            set_next ();
        }

现在我可以使用特定于 MovieClip 的方法,例如 gotoAndStop:

function playSnd ():void
    {
        movie.gotoAndStop("aan");
        snd = new Sound(new URLRequest("phonetic_" + curArr[curSnd] + ".mp3"));
        cnl = snd.play();
        cnl.addEventListener (Event.SOUND_COMPLETE, completeSnd);
    }

受此答案启发的答案

于 2012-12-11T13:15:39.760 回答
-1
bg.name = "bg";

实际上很多时候这段代码不能正常工作。因此,您应该获取“achtergrond”对象的真实实例名称,而不是设置名称,而不是使用此实例名称。

另一个解决方案:

我认为 achtergrond 是单个对象,那么为什么将它与“getChildByName”一起使用?像使用它bg.gotoAndStop();

于 2012-12-11T13:15:39.560 回答