Flutter Flame教程6 -- 背景音乐

2,790 阅读2分钟

Looping Background Music 背景音乐


Bgm类负责管理与应用程序(或游戏)生命周期状态变化有关的背景音乐。

当应用程序暂停、终止或者发送到后台时,Bgm会自动暂停正在播放的音乐曲目。相同的,当程序恢复的时候,Bgm也会恢复背景音乐。手动暂停和恢复也是支持的。

为了使Bgm类正常运行,观察员必须通过以下方式注册:

    Flame.bgm.initialize();

重要提示:initialize方法必须在WidgetsBinding类实例已经存在的时候才能被调用。在runApp已经被至少调用一次之后,可以假设这种情况都是正确的。

在背景音乐已经结束,但是还想保持应用/游戏运行的情况下,使用dispose方法去移除观察者。

    Flame.bgm.dispose();

为了循环播放背景音乐,运行如下:

    import 'package:flame/flame/dart';
    Flame.bgm.play('adventure-track.mp3');

或者,如果你更喜欢的话:

    import 'package:flame/bgm.dart';
    
    Bgm audio = Bgm();
    audio.play('adventure-track.mp3');

注意:Bgm类会一直使用在Flame.audio包中的FlameAudio的静态实例去保存缓存的音乐文件。

你必须有一个合适的文件结构,并添加文件到pubspec.yaml文件,正如Flame音频文档中的解释一样。

缓存音乐文件


以下的方法可以用于使用预加载(和卸载)音乐文件到缓存中。 这些方法只是在Flame.audio中的别名,有相同的名字。

再次提醒,如果你需要更多的信息,请查看Flame音频文档.

    Flame.audio.load('adventure-track.mp3');
    Flame.audio.loadAll([
        'menu.mp3',
        'dungeon.mp3',
    ]);
    Flame.audio.clear('adventure-track.mp3');
    Flame.bgm.clearAll();

方法


播放

play方法接收一个String变量,是一个指向播放音乐文件的文件名字(遵循Flame Audio文件夹结构要求).

你可以传递额外的可选double参数,volume变量(默认是1.0). 例子:

    Flame.bgm.play('bgm/boss-fight/level-382.mp3');
    Flame.bgm.play('bgm/world-map.mp3',volume: .25);

暂停

暂停正在播放的背景音乐,使用stop方法.

    Flame.bgm.stop();

暂停和恢复

为了手动暂停和恢复背景音乐,你可以使用pause和resume方法。

Flame.bgm 自动处理暂停和恢复正在播放的背景音乐曲目。 手动暂停该功能可防止将焦点重新分配给应用程序/游戏时,应用程序/游戏自动恢复。

    Flame.bgm.pause();
    Flame.bgm.resume();