phaser.io预加载数据然后预加载图像

时间:2014-08-23 05:57:25

标签: javascript phaser-framework

我在使用以下代码时遇到了一些问题:

CardList.preload = function() 
{
    game.load.text('card_list', '/data/card_list.json');

    var card_list = JSON.parse(game.cache.getText("card_list"));

    // :ISSUE: This code never fires because card_list isn't populated until preload is complete...
    for(var i in card_list)
    {
        game.load.image('hero_card_' + i, 'images/hero_card_' + i + '.jpg');
        game.load.image('hero_tile_' + i, 'images/hero_tile_' + i + '.jpg');
    }

}

基本上,我尝试加载播放器拥有的卡片列表(来自JSON文件),然后预加载图像。问题是,game.load.text()不会立即触发,也不支持回调。

有没有不同的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

Phaser preload函数通过执行所有'game.load'调用并从中构建加载器队列来工作。然后它启动加载程序运行 - 这就是它知道要加载多少文件,剩下多少文件等等。这也意味着你无法访问要在preload函数本身内加载的文件。

您有两种选择:您可以将card_list.json加载到另一个状态(即引导状态),然后您可以解析它并加载它在Preloader状态下列出的资产。如果查看“项目模板”文件夹中的Phaser存储库,您将找到执行此操作的示例设置。

选项2是你的预加载功能只加载card_list(以及你知道在这里加载的任何其他资产)然后加载后你可以启动另一个加载实际资产的Loader。这里有一个例子:http://examples.phaser.io/_site/view_full.html?d=loader&f=load+events.js&t=load%20events