开发者问题收集

无法在 Phaser 3 中更改场景

2019-05-19
3545

我的 Phaser 3 游戏有一个名为 game 的场景,我使用 check() 方法从该场景调用另一个场景 ma​​inMenu ,该方法在加载场景中使用:

//inside check() 
this.scene.start("mainMenu");

但这会导致错误:

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

我相信它与代码中的 this 有关,但我不确定。那么如何从函数启动场景呢?

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");}
}

game.js

class game extends Phaser.Scene {
constructor() {
super({ key: "game" });
}
create() {
 check();
}
}
1个回答

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

如果您使用“call”方法调用检查并传递游戏的“this”,它应该可以解决您的问题,但这可能不是最干净的方法。

另外,我相信 create 只在初始化时被调用,所以我不认为游戏结束会在此时成为现实(您可能希望在更新中调用它)

class game extends Phaser.Scene {
  constructor() {
    super({ key: "game" });
  }
  create() {
    check.call(this);
  }
}

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

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);
Melbourne2991
2019-05-19