Javascript 无法更改Phaser 3中的场景

Javascript 无法更改Phaser 3中的场景,javascript,phaser-framework,Javascript,Phaser Framework,我的phaser 3游戏有一个名为game的场景,我使用check()方法调用另一个场景主菜单,该方法在加载场景中使用: //inside check() this.scene.start("mainMenu"); 但这会导致一个错误: 未捕获的TypeError:无法读取未定义的属性“start” 我相信它与代码中的这个有关,但我不确定。那么如何从函数开始场景呢 Load.js var config{ //game config goes here scenes: [mainMenu,ga

我的phaser 3游戏有一个名为game的场景,我使用check()方法调用另一个场景主菜单,该方法在加载场景中使用:

//inside check() 
this.scene.start("mainMenu");
但这会导致一个错误:

未捕获的TypeError:无法读取未定义的属性“start”

我相信它与代码中的这个有关,但我不确定。那么如何从函数开始场景呢

Load.js

var config{
//game config goes here
scenes: [mainMenu,game]
}

var game = new Phaser.Game(config);
function check(){
if(game over == true){
this.scene.start("mainMenu");}
}
class game extends Phaser.Scene {
constructor() {
super({ key: "game" });
}
create() {
 check();
}
}
game.js

var config{
//game config goes here
scenes: [mainMenu,game]
}

var game = new Phaser.Game(config);
function check(){
if(game over == true){
this.scene.start("mainMenu");}
}
class game extends Phaser.Scene {
constructor() {
super({ key: "game" });
}
create() {
 check();
}
}

在check函数体中,“this”指的是check函数本身,它没有scene属性,这就是您看到错误的原因

如果您使用“call”方法调用check并通过游戏的“this”,应该可以解决您的问题,但这可能不是最干净的方法

我相信create只在初始化时调用,所以我不认为游戏结束在这一点上是真的(你们可能想在更新中调用它)

编辑:下面可能是我解决问题的方法:

class MainScene extends Phaser.Scene {
  constructor() {
    super({ key: "MainScene" });
  }

  create() {}

  isGameOver() {
    // logic to determine if the game is over
  }

  update() {
    if (this.isGameOver()) {
      this.scene.start("MainMenu");
    }
  }
}

var config {
  //game config goes here
  scenes: [
    MainMenu,
    MainScene
  ]
}

var game = new Phaser.Game(config);

不是相位器问题,错误是告诉您问题是什么,“场景”未定义。所以您的“this”引用可能并没有指向您认为它是什么(在js中,“this”可能会误导您),或者它指向您认为它是什么,而场景只是没有定义。。。不管是哪种方式,如果你不给我们看全班就不可能说出来……所以更多的细节会有所帮助