精华 请教一下, Phaser中, 如果需要动态的加载一些图片, 不在preload的时候加载, 应该如何做?
发布于 4 年前 作者 JumperShao 2693 次浏览 来自 问答

比如一个类似聊天室这样的场景, 一个新的用户连接进来的时候, 他的头像要显示, 这样就无法在preload的时候加载他的头像, 需要在场景的运行中动态的加载图片. 请各位高人指点…

谢谢!

5 回复

根据站长提示, 如下可以实现:

// 前面两个参数代表游戏区域 800x600 px // Phaser.AUTO表示自动选择Canvas或者webGL // 'phaser-example’表示将游戏区域放在id为phaser-example的元素中 // 最后一个参数指定回调,preload预加载资源,create创建游戏 var game = new Phaser.Game(800, 600, Phaser.AUTO, ‘phaser-example’, { preload: preload, create: create });

function preload() { // 加载一个图片,之后可通过 einstein 来引用 }

function create() { // 在(0,0)位置显示该图片 game.load.image(‘einstein’, ‘assets/pics/ra_einstein.png’); game.load.start();

game.add.sprite(0, 0, 'einstein');

}

在preload中通过game.load加载资源,会自动调用game.load.start。在其他地方需要我们手动调用。其他的使用方法(比如回调啥的)都是一样的。

好像任然有问题, 如果清空缓存, 第一次运行, 仍然报 Phaser.Cache.getImage: Key “einstein” not found in Cache. 这个时候, 如果刷新页面, 就可以显示出来. 但是如果每次都清除缓存, 第一次运行是无法显示的…

原因找到, 是因为还没有加载完成, 需要在完成后, 再使用… 如下

var game = new Phaser.Game(640, 480, Phaser.AUTO, ‘game’, { preload: preload, create: create });

function preload() {

}

function create() { // 在(0,0)位置显示该图片 game.load.image(‘copyright’, ‘assets/copyright.png’); game.load.start(); console.log("=========== isLoading :" + game.load.isLoading );

game.load.onLoadComplete.add(onComplete, this);

}

function onComplete () { game.add.sprite(0, 0, ‘copyright’); }

对的,需要在加载完成之后再处理啊[尴尬]

回到顶部