【问题标题】:Phaser: how to load assets after preload?Phaser:预加载后如何加载资产?
【发布时间】:2015-12-11 07:39:06
【问题描述】:

我想知道是否可以在 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 函数:

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.

你知道我怎样才能让它工作,或任何其他方法来确保在游戏启动时不会加载这三首歌曲吗?谢谢!

【问题讨论】:

    标签: javascript phaser-framework


    【解决方案1】:

    来自documentation,对于像我这样的菜鸟来说是个未知数:

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

    将音频文件添加到当前加载队列。

    调用此方法后文件不会立即加载。当加载器启动时,文件被添加到准备加载的队列中。

    所以基本上,预加载后的 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...
    }
    

    【讨论】:

      最近更新 更多