Phaser:预加载后如何加载资产?

Phaser: how to load assets after preload?

我想知道是否可以在给定时间在 Phaser 中动态加载资产,而不是在预加载函数中加载所有内容。原因很简单:我有一个游戏分为三个不同的关卡,每个关卡都有不同的背景歌曲;所以我宁愿在启动时只加载一首歌曲以减少加载时间。

现在,我的预加载函数如下所示:

preload: function()
{
    game.load.audio('pixel_world',
        ['assets/music/pixel_world_lo.ogg', 'assets/music/pixel_world_lo.mp3']);
    game.load.audio('second_source',
        ['assets/music/second_source_lo.ogg', 'assets/music/second_source_lo.mp3']);
    game.load.audio('reboot_complete',
        ['assets/music/reboot_complete_lo.ogg', 'assets/music/reboot_complete_lo.mp3']);
    game.load.image('pickup', 'assets/img/pickup.png');
}

我尝试将 game.load.audio() 调用之一移至创建函数:

create: function()
{
    game.load.audio('pixel_world',
        ['assets/music/pixel_world_lo.ogg', 'assets/music/pixel_world_lo.mp3']);
    // good things follow...
}

但是,以下调用失败:

this.cache.isSoundDecoded(level.song)
// Phaser.Cache.isSoundDecoded: Key "pixel_world" not found in Cache.

song = game.add.audio(level.song);
// Phaser.Cache.getSound: Key "pixel_world" not found in Cache.

你知道我怎样才能让它工作,或者有什么其他方法可以确保在游戏启动时不加载这三首歌曲吗?谢谢!

来自 documentation,对于像我这样的新手来说,这是一个巨大的未知数:

audio(key, urls, autoDecode) → {Phaser.Loader}

Adds an audio file to the current load queue.

The file is not loaded immediately after calling this method. The file is added to the queue ready to be loaded when the loader starts.

所以基本上,预加载后 game.load.audio() 不会加载歌曲,只是将其添加到队列中以备后用。为了加载歌曲,我还需要调用 game.load.start():

create: function()
{
    game.load.audio('pixel_world',
        ['assets/music/pixel_world_lo.ogg', 'assets/music/pixel_world_lo.mp3']);
    game.load.start(); // THIS!
    // good things follow...
}