【发布时间】:2021-11-12 10:10:11
【问题描述】:
我想在 JSON 文件中描述我的场景,然后根据该 JSON 文件的内容预加载图像等。所以 JSON 文件的内容需要在进入 preload 之前已经完全加载。我不知道该怎么做。我创建了一个最小的、可重现的jsfiddle,它在prepreload = true 时记录preload: undefined。
对于prepreload = false,我得到create: [object Object]。
var prepreload = true
var config = { scene: { init: init, preload: preload, create: create } }
var game = new Phaser.Game(config)
function init(config) {
if (prepreload) {
this.load.json('scenedata', 'scene.json');
this.load.start();
}
}
function preload () {
if (prepreload)
console.log(this.cache.json.get("scenedata"));
else
this.load.json('scenedata', 'scene.json');
}
function create () {
if (!prepreload)
console.log(this.cache.json.get("scenedata"));
}
知道如何根据 JSON 文件的内容预加载图像 - 最好在 Scene 类中进行,而不是在外部执行并将其传递给 init 方法或类似方法。
【问题讨论】:
-
您能分享 JSON 内容或其中的一部分以便复制吗?
-
只是猜测......但是
this.load.onLoadComplete.add(this.load.start(), this);怎么样 -
@Nelloverflow 内容与问题无关。但我创建了一个 jsfiddle 来重现。
-
是的,你是对的,我看错了......挖掘 Scene 的源代码,看起来如果你想在
preload()之外预加载,那么你必须覆盖一些回调行为。 github.com/photonstorm/phaser/blob/v3.51.0/src/scene/… 你可以看到 preload 专门等待加载器完成loader.once(LoaderEvents.COMPLETE, this.loadComplete, this);此外,你可以看到在preload()之前没有触发内部加载器行为。
标签: phaser-framework