Невозможно изменить сцены в Phaser 3 - PullRequest
1 голос
/ 19 мая 2019

В моей игре phaser 3 есть сцена, называемая game , из которой я вызываю другую сцену mainMenu , используя check () метод, который находится в сцене загрузки, используя:

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

Но это приводит к ошибке:

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

game.js

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

1 Ответ

1 голос
/ 19 мая 2019

В теле функции проверки «this» относится к самой функции проверки, у которой нет свойства сцены, поэтому вы видите ошибку.

Если вы вызываете check с помощьюМетод "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);
...