我在使用以下代码时遇到了一些问题:
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()不会立即触发,也不支持回调。
有没有不同的方法来解决这个问题?
答案 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