Flutter Flame教程5 -- Audio 音訊

我跑步前腳先著地發表於2020-05-04

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();
複製程式碼

相關文章