Phaser 3:在调用 Scene.preload() 之前完成加载 json

Phaser 3: Finish loading json before Scene.preload() gets called

我想在JSON文件中描述我的场景,然后根据那个JSON文件的内容预加载图像等。所以JSON文件的内容需要在进入preload之前已经全部加载完毕。我不知道该怎么做。我创建了一个最小的、可重现的 jsfiddle,它在 prepreload = true 时记录 preload: undefinedprepreload = 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 文件的内容预加载图像 - 理想情况下都在场景 class 内,而不是在外部执行并将其传递到 init方法或类似方法。

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' }