1

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

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() 不会立即触发,并且不支持回调。

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

4

1 回答 1

2

Phaser 预加载函数通过执行其中的所有“game.load”调用并从中构建加载器队列来工作。然后它启动加载器运行 - 这就是它如何知道有多少文件要加载,还有多少文件等。这也意味着您无法访问即将在预加载函数本身中加载的文件。

您有两个选择:您可以将 card_list.json 加载到不同的状态(即引导状态),然后您可以解析它并加载它在 Preloader 状态中列出的资产。如果您查看 Project Templates 文件夹中的 Phaser 存储库,您会发现执行此操作的示例设置。

选项 2 是您的预加载函数仅加载 card_list (以及您知道可以安全加载的任何其他资产),然后一旦加载,您就可以启动另一个加载实际资产的加载程序运行。这里有一个例子:http: //examples.phaser.io/_site/view_full.html?d=loader&f=load+events.js&t= load%20events

于 2014-08-25T21:07:12.177 回答