【问题标题】:Phaser 3: Finish loading json before Scene.preload() gets calledPhaser 3:在调用 Scene.preload() 之前完成加载 json
【发布时间】: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 来重现。
  • @DennyMueller 除非我误解了文档,否则start() 用于开始加载,并且在加载完成时引发COMPLETE 事件,换句话说,您混淆了鸡和蛋。但是您可以在我刚刚添加到问题中的 jsfiddle 中证明我错了。
  • 是的,你是对的,我看错了......挖掘 Scene 的源代码,看起来如果你想在 preload() 之外预加载,那么你必须覆盖一些回调行为。 github.com/photonstorm/phaser/blob/v3.51.0/src/scene/… 你可以看到 preload 专门等待加载器完成 loader.once(LoaderEvents.COMPLETE, this.loadComplete, this); 此外,你可以看到在 preload() 之前没有触发内部加载器行为。

标签: phaser-framework


【解决方案1】:

SettingsConfig 可以用于此 - 进入init 方法时,pack 下列出的文件将已经加载。

这是如何完成的(Phaser 3.55.2):

var config = { 
  scene: { 
    init: init, 
    preload: preload,
    create: create,
    pack: { 
      "files": [
        { type: 'json', key: 'scene', url: 'scene.json' }
      }
    }
  }
}
var game = new Phaser.Game(config)

这里有一个稍微不同的变体,使用 TypeScript:

export class TestScene extends Phaser.Scene {
  constructor() {
    super({ pack: {
            "files": [ { type: 'json', key: 'scene', url: 'scene.json' }

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多