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();