所以我的 Phaser3 (package.json
中的版本是 3.21.0 )应用中有两个场景,我希望在两个场景之间切换副作用。第一个场景是用于处理高分菜单,第二个场景是游戏本身。
相关代码
app.ts
文件如下所示:
const config = {
title: '<game-name>',
width: 800,
height: 600,
parent: 'game',
scene: [MenuScene, GameScene],
};
export class GameName extends Phaser.Game {
constructor(config: any) {
super(config);
}
}
window.onload = () => new GameName(config);
MenuScene.ts
-删除了不适用的部分:
class MenuScene extends Phaser.Scene {
constructor() { super({key: 'MenuScene'}); }
create():void {
console.log('create menuscreen');
const enter = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.ENTER);
enter.on('down', () => { this.scene.start('GameScene'); }
}
}
GameScene.ts
-还删除了不相关的代码段:
class GameScene extends Phaser.Scene {
constructor() { super({key: 'GameScene'}); }
create = ():void => {
console.log('create gamescreen');
const esc = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.ESC);
esc.on('down', () => { this.scene.start('MenuScene'); }
}
}
问题和我的问题
因此,一旦我重复按 Enter 和 Esc 只是为了切换提供的解决方案,它似乎并没有清除背景中的场景。在console
上切换几次(在下面的示例中为6次)后,我看到以下内容:
我已经尝试在this.scene.stop()
之前致电this.scene.start('<scene-key>')
,但仍然是同样的问题。我已经在阅读Phaser3 Scenes transitions问题,但似乎无法回答我的问题。有人告知start()
应该清理或关闭未使用的设备。
那么我应该如何在场景之间正确切换或清理当前未使用的场景?
谢谢!
答案 0 :(得分:1)
这就是我的做法
1.-游戏中的场景可暂停
场景scene_pause
将在game_scene
上方,因为最后一个场景将是顶部场景
isPaused = this.scene.isPaused('scene_game');
if (false === isPaused) {
this.scene.pause('scene_game');
}
const isNull = this.scene.get('scene_pause');
if (null === isNull) {
this.scene.add('pause_scene', PauseScene, true);
}
然后当y恢复游戏时
isActive = this.scene.isActive('scene_pause');
if (true === isActive) {
this.scene.remove('scene_pause');
}
isPaused = this.scene.isPaused('scene_game');
if (true === isPaused) {
this.scene.resume('scene_game');
}
2.-切换场景以结束游戏
this.scene.stop('scene_game'); // stop executing the Update 1rst
... // save the state and score
this.scene.remove('scene_game'); // I remove the scene, because I will add again when start the game
this.scene.stop('scene_ui');
this.scene.switch('scene_game_over');