2012-12-11 62 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