2012-12-11 48 views
0

MovieClip实例我从库中影片剪辑“achtergrond”,我把在舞台上有这样的功能的正确方法:AS3找不到gotoAndStop在AS3

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的这部分。

回答

0

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

我宣布一个新的变量:

var movie:MovieClip; 

然后我投我一DisplayObject作为一个MovieClip,并把它变成了var 电影

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(); 
     } 

现在我可以使用特定的影片剪辑的方法like 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); 
    } 

Answer inspi红由this answer

+0

更简单的方法[如果资产不是动态创建的]就是引用带括号的项目,例如this [“bg”]。stop()或者如果你想要提示MovieClip(this [“bg”])。通常写得更快,但只有在您没有动态创建资产时才有效。但是,如果你这样做了,你可能会把它们存储在一个类变量中,而不需要通过另一个动画片段找到它 –

+0

@DanielMesSer如你所见,资源是在函数set_game()中动态创建的。这一点你的评论我不明白:你可能有他们存储在一个类变量无论如何,不​​需要通过另一个动画片段找到它。你能解释一下吗? – silvith

+0

在评论中编写描述性内容有点困难,但我会尝试。我的意思是,既然你动态地创建它们,你通常会在某种类中做它,然后你可以选择将它们存储在成员变量或数组或表格中或类似的东西中。比如在一个类里面:'var myBubbles:Array = [new Bubble(),new Bubble(),new Bubble()]'。然后做一些像myBubbleEmitter.addChild(myBubbles [0])这样的东西。'myOtherBubbleEmitter.addChild(myBubbles [1]);'因此,你真的不关心动态创建的东西的名称,因为你以另一种方式访问​​它们。说得通? –

-1
bg.name = "bg"; 

实际上很多次这段代码无法正常工作。因此,不要设置名称,而应该获得“achtergrond”对象的实例名称,而不必使用此实例名称。

另一种解决方案:

我觉得achtergrond是单个对象何必非要用“getChildByName”使用它呢?像bg.gotoAndStop();一样使用它。

+0

我从来没有遇到过名称的问题,但我知道他们可以发生。我已经尝试了您的其他解决方案,但没有奏效。我回答了我自己的问题,如果您有兴趣,请查看。 – silvith