2014-04-30 64 views
1

我有一個帶場景選擇菜單的動畫集合。我已經把一個音樂按鈕放在一起,工作正常。我使用布爾值來確定每個場景上的音樂是打開還是關閉。 問題是,布爾的聲明位於菜單場景的第一幀,每次動畫結束時,都會返回到菜單場景的第一幀,並且聲明會覆蓋布爾值的狀態。因此,如果布爾值稍後在菜單或其中一個動畫中更改,則每次菜單重播時,布爾值都會恢復爲其聲明的值。actionscript防止重複幀中的變量重新定義

有沒有一種方法來防止重複幀中的變量重新聲明,或者是一個命令來計算幀的播放次數,我可以用來跳過變量聲明?使用

代碼:

//Stop other scene sounds 
SoundMixer.stopAll(); 

//music variables 
var mutemusic_bln:Boolean = new Boolean(); 
var menubackgroundmusic:Sound = new menu_mp3(); 
var music_cnl:SoundChannel = new SoundChannel(); 
var music_trn:SoundTransform = new SoundTransform(); 
//starting music 
if (mutemusic_bln){ 
    music_cnl= menubackgroundmusic.play(); 
    music_trn.volume = 1; 
    music_cnl.soundTransform = music_trn 
}else{ 
    music_cnl= menubackgroundmusic.play(); 
    music_trn.volume = 0; 
    music_cnl.soundTransform = music_trn 
} 

我設法得到它的菜單現場之前創建一個空的場景,只有一個空白腳本框架正常工作。我在那裏替換了布爾型聲明,並且由於動畫返回到菜單而不是菜單之前的場景,因此它不會覆蓋該值。雖然我仍然會喜歡更體面或更專業的解決方案。

回答

0

無法防止變量被改變。這就是爲什麼它是可變的:)另一方面的常量只能被初始化一次,以後不能再被修改。

您的邏輯中唯一的問題是每次都使用時間軸並執行相同的代碼。你的解決方案沒問題。有時候,人們只會添加一個空白的關鍵幀,而不是整個場景,並且在時間軸的末尾放置gotoAndPlay(2);。但是這個想法和你所做的完全一樣 - 爲此歡呼! :)

另一種解決方案有寫類似這樣的東西:

if (!this.initialized) { 
    // declare everything here, it will be executed only once 
    this.initialized = true; 
} 

這將完成的是,它會在根目錄變量(initialized)設置爲true,並且將只執行一次塊。該變量稍後不會被更改,因爲該框架中沒有任何代碼會再次更改它,與重置代碼的代碼不同。

無論哪種方式,邏輯都和問題一樣 - 如果你使用類,這幾乎不會發生!

希望有幫助!

+0

這正是我所期待的。我按照你的說法做了,它很有效。不幸的是,我大多使用flash進行動畫製作,而且我對actionscript 3或編程這個問題比較陌生,所以我認爲我不會很快使用類。 – user248979

+0

我很高興它解決了! :) –