无法添加具有重复键的场景:默认

Ben*_*Gil 7 javascript node.js phaser-framework

我开始学习Phaser 3框架,我面临这个大错误,我不知道为什么会发生这种情况,错误是:无法添加具有重复键的场景:默认。

我的两个密钥完全不同,这里可能出了什么问题,我不明白,我正在观看 YouTube 播放列表教程,而那个人有完全相同的东西,并且一切对他来说都工作正常,因为它应该。

我的主要区别是我在 Node js 服务器中运行所有这些,但我认为这并不重要,我只是提供包含所有游戏的公共文件夹。

这是我的一些代码

这是我的第一个场景

class BootLoader extends Phaser.Scene {
    constructor() {
        super({
            Key: "BootLoader"
        });
    }

    preload() {
        alert("La escena del boot cargo");
    }
}

export default BootLoader;
Run Code Online (Sandbox Code Playgroud)

这是第二个场景

class ScenePlay extends Phaser.Scene {
    constructor() {
        super({
            Key: "ScenePlay"
        });
    }

    preload() {
        alert("La escena del scene cargo");
    }
}

export default ScenePlay;
Run Code Online (Sandbox Code Playgroud)

这是我的初始化文件,其中包含游戏的配置。

import ScenePlay from "./scenes/ScenePlay.js";
import BootLoader from "./bootloader.js";

const config = {
    width: 640,
    height: 400,
    parent: "container",
    physics: {
        default: "arcade"
    },
    scene: [
        ScenePlay,
        BootLoader
    ],
}

new Phaser.Game(config);
Run Code Online (Sandbox Code Playgroud)

这是在我的 index.html 文件上运行的脚本

<!-- Phaser libraries and my Game -->
<script src="//cdn.jsdelivr.net/npm/phaser@3.16.2/dist/phaser.js"></script>
<script src="./game/init.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

这是我的 Node Js 服务器文件,但我不认为这是问题所在

const express = require("express");

const app = express();

app.use(express.static('public'));

app.listen(3000, function () {
    console.log("Server is running on port 3000");
});
Run Code Online (Sandbox Code Playgroud)

小智 0

好的,我刚刚在分享引发这篇文章的相同问题时找到了解决方案。

代码

import ScenePlay from "./scenes/ScenePlay.js";
import BootLoader from "./bootloader.js";

const config = {
    width: 640,
    height: 400,
    parent: "container",
    physics: {
        default: "arcade"
    },
    scene: [
        ScenePlay,
        BootLoader
    ],
}

new Phaser.Game(config);
Run Code Online (Sandbox Code Playgroud)

缺少场景类初始化,这就是为什么 Phaser 使用默认值在两个场景中使用相同的“默认”键来完成它。

只需在场景声明和配置之间添加以下初始化行:

var sceneToPlay = new ScenePlay();
var sceneToBoot = new BootLoader();
Run Code Online (Sandbox Code Playgroud)

然后,修改您的配置以使用初始化的类实例:

const config = {
        width: 640,
        height: 400,
        parent: "container",
        physics: {
            default: "arcade"
        },
        scene: [
            sceneToPlay,
            sceneToBoot
        ],
    }
Run Code Online (Sandbox Code Playgroud)

这应该可以解决它,就像它为我所做的那样。

最好的