Audio 音訊
播放音訊,非常簡單!在任何時候,只需要執行:
import 'package:flame/flame.dart';
Flame.audio.play('explosion.mp3');
Flame.audio.playLongAudio('music.mp3');
複製程式碼
或者,如果你更喜歡的話:
import 'package:flame/flame_audio.dart';
FlameAudio audio = FlameAudio();
audio.play('explosion.mp3');
audio.playLongAudio('music.mp3');
複製程式碼
不同點是每一個例項共享不同的快取。一般來說你應該使用Flame.audio例項,共享快取。
你必須有合適的檔案結構,新增檔案到pubspec.yaml檔案中,正如如上所述。
可以是MP3,OGG或者WAV檔案。
使用audioplayers庫,目的是為了允許同步播放多個不同的音訊(在遊戲中非常重要)。你可以在這個庫中找到更詳細的解釋。
如果你想無限播放,只需要使用loop函式。
Flame.audio.loop('musci.mp3');
Flame.audio.loopLongAudio('musci.mp3');
複製程式碼
或者,你可以使用Bgm來迴圈播放背景音樂。當暫停/恢復遊戲或者應用時,Bgm類讓Flame可以管理自動暫停或者恢復背景音樂。
play/loop和playLongAudio/loopLongAudio的區別是,play/loop使用了優化的屬性,使得音訊在迭代迴圈的時候沒有間隙,而且遊戲幀率幾乎不會丟失。在任何時候,你更應該使用這個方法。playLongAudio/loopLongAudio允許播放任何長度的音訊,但它們確實會導致幀率丟失,並且在迭代的時候迴圈的音訊會有小的延遲。
最後,你可以預載入音訊。音訊在第一次使用的時候應該被儲存在記憶體中;因此,當你第一次播放每個mp3時,你可能會有延遲。為了預載入音訊,只需要使用:
Flame.audio.load('explosion.mp3');
複製程式碼
在一開始的時候,你可以載入所有的音訊,所以它們可以播放的很流暢;為了載入多個音訊,使用loadAll方法:
Flame.audio.loadAll(['explosion.mp3', 'music.mp3'])
複製程式碼
最後,你可以使用clear方法來從快取中移除:
Flame.audio.clear('explosion.mp3');
複製程式碼
也有clearAll方法,來清除所有的快取。
這可能非常有用,比如,當你的遊戲有很多關,並且每一關都有不同配樂。
兩個load方法都為所有載入的File都返回Future。
兩個play和loop你都可以傳遞額外的可選double變數volume(預設是1.0).
兩個play和loop方法都返回來自audioplayers的AudioPlayer的例項,它允許你停止、暫停和配置其他的特性。
有許多的日誌,這是原始的AudioPlayer外掛的功能。在除錯時非常喲用,但是之後你可以禁用它們:
Flame.audio.disableLog();
複製程式碼