控制台在JavaScript中为.add输出Uncaught TypeError

时间:2019-01-01 18:35:19

标签: javascript html phaser-framework tiled

我正在制作2D平台游戏,其中我使用Phaser框架(版本3.15.1)来简化生活,并为游戏的第一阶段提供了平铺地图。我已经从Tiled中将地图导出为.json文件,并读入了主要的JS文件。但是,在我的索引HTML文件(从中运行所有JS文件)中,出现以下错误:

Uncaught TypeError: Cannot read 
property 'add' of index.html:17 undefined 
at index.html:17
at index.html:20

以下是相关代码:

<head>
    <meta charset="UTF-8">
    <title>Nightly Neighbours Using Phaser</title>
    <script type="text/javascript" src = "js/phaser.js"></script>
    <script type="text/javascript" src = "js/phaser-arcade-physics.js"> 
    </script>
        <script type="text/javascript" src = "js/Boot.js"></script>
        <script type="text/javascript" src = "js/Preload.js"></script>
        <script 
type="text/javascript"src="js/NightlyNeighbours1WithPhaser.js"> 
   </script>
        <script type="text/javascript">
            (function() {
                game = new Phaser.Game(window.innerWidth * 
                window.devicePixelRatio, 
                window.innerHeight * window.devicePixelRatio, Phaser.AUTO);
                game.state.add("Boot", Boot);
                game.state.add("Preload", Preload);
                game.state.add("NightlyNeighbours1WithPhaser", Main);
                game.state.start("Boot");
            })();
        </script>
</head>

错误指向lines 17 - 20

非常感谢!

1 个答案:

答案 0 :(得分:0)

在Phaser 3中,使用state改为使用scene。根据您的代码,看起来您正在将Phaser 2代码与Phaser 3库一起使用。

有一个很棒的官方教程(从代码方面开始Part 5,因为它似乎已经设置好了环境),涵盖了Phaser 3。

在该教程中,Phaser.Game的定义类似于以下内容:

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 200 }
        }
    },
    scene: {
        preload: preload,
        create: create
    }
};

var game = new Phaser.Game(config);

您还可以通过调用game.scene.add(...)向游戏添加新场景。