Phaser: как загрузить активы после предварительной загрузки?

Интересно, можно ли загружать актив динамически в заданное время в 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.

Вы знаете, как я могу заставить это работать или каким-либо другим способом убедиться, что три песни не загружаются при запуске игры? Спасибо!


person unpollito    schedule 10.12.2015    source источник


Ответы (1)


Из документации, большого неизвестного для таких новичков, как я:

аудио (ключ, URL, 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...
}
person unpollito    schedule 10.12.2015