我使用Actionscript 3創建音樂播放遊戲。爲此,我爲每個樂器記錄了大約20個音符(也使用Starling Framework和FlashDevelop,儘管這些可能與這個問題無關)。我目前通過指定每個文件的路徑和嵌入每個〜20的加載默認工具音符聽起來是這樣的:Actionscript 3 - 使用循環嵌入聲音文件陣列
[Embed(source = "../assets/1.mp3")]
public var SOUND_1:Class;
var sound:Sound = new SOUND_1() as Sound;
_sounds[1] = sound;
[Embed(source = "../assets/2.mp3")]
public var SOUND_2:Class;
var sound:Sound = new SOUND_2() as Sound;
_sounds[2] = sound;
[Embed(source = "../assets/3.mp3")]
public var SOUND_3:Class;
var sound:Sound = new SOUND_3() as Sound;
_sounds[3] = sound;
//... etc...
然而,爲了嵌入了不同的樂器的聲音,我需要更多的東西模塊化。我寫了下面的循環,我期望加載聲音並將它們存儲在一個對象數組中(我已經在應用程序中使用了這樣一個數組)。我遇到的問題是,當我使用像這樣的字符串時,Embed標籤似乎無法識別文件名的擴展名。如果我將一個文件名硬編碼到EMBED行中,那麼它會很好地編譯(儘管顯然它會每次加載約20個相同聲音的副本)。
for (var i:int = 1; i < totalSounds + 1; i++) {
var filename:String = '../pathtosounds/' + String(i) + '.mp3';
[Embed(source = filename)]
var MY_SOUND:Class;
var sound:Sound = new MY_SOUND() as Sound;
_sounds[i] = sound;
}
有沒有辦法解決這個問題,而無需爲每個可能的音符和樂器手動輸入每個文件名/文件路徑?
您可以在大多數IDE中編寫腳本/批處理文件,通過使用循環或掃描目錄來自動編寫嵌入代碼。 FlashDevelop適用於這類事情。 – BadFeelingAboutThis 2014-10-28 22:46:57
http://sourceforge.net/projects/assetpack/ - 應該是你的理想選擇(我從來沒有用過它) – BadFeelingAboutThis 2014-10-28 22:50:54
你的方法不是模塊化的,所以沒有理由寫它應該是。 – BotMaster 2014-10-29 12:11:10