javascript - 无法读取未定义的 Phaser.js 的属性 add()

标签 javascript phaser-framework

game.state.add() 函数有问题。出于某种原因,game 未定义:

Uncaught TypeError: Cannot read property 'add' of undefined at Object.init (main.js:51) at main.js:58

这是我的代码:

var socket; // global bir socket değişkeni.
    socket = io.connect(); // server a bağlantı isteği gönderir.
                           //Server bağlantı isteğini dinler ve clientlara başarılı olursa geri "connect" mesajını emitler.

    //Oyunun ekrana oturması için boyutları ayarlıyoruz.Browserla ilgili.
    var canvas_width = window.innerWidth * window.devicePixelRatio;
    var canvas_height = window.innerHeight * window.devicePixelRatio;   
    //Oyunumuzu belirlediğimiz divin içinde yaratıyoruz.
    var game = new Phaser.Game(canvas_width,canvas_height,Phaser.CANVAS,'gameDiv');

    var gameProperties = {
      //oyunun gerçek boyutları.oyun dünyasının genişliği ve uzunluğu.
      gameWidth:4000,
      gameHeight:4000,
    }

    //Oyunun ana state i.
    var main = function(game){

    };
    main.prototype ={
    preload:function(){

    },
    create:function(){ // oyun yaratıldığında çağrılır.
    console.log("Client yaratıldı.")
    //serverdan connect mesajı gelince onSocketConnected fonksiyonunu çalıştır.
    socket.on("connect",onSocketConnected); //serverdan gelecek connect mesajı için dinler.Socket.io bir client
                                            // servera bağlandığında otomatik olarak connect mesajını client a gönderir.
                                            //serverın clientlara mesaj göndermesine "emit"  denir.

    },    
    }
    function onSocketConnected(){
      console.log("Sunucuya bağlanıldı.")    
    };

    var gameBootStrapper = {
         init:function(gameContainerId){
             game.state.add('main',main);   //error here
             game.state.start('main');
         }
    };    
    gameBootStrapper.init('gameDiv');

我的 index.html:

<body>
    <div id="gameDiv">
    </div>    
</body>
<script src="client/lib/phaser.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src ="client/main.js"></script>

这里有一张index.html的图片: ..................................................... ……

Image of console

最佳答案

我认为这与范围和上下文有关。

您正在从 gameBootStrapper 的上下文中调用 init,并且该上下文中不存在变量 game。换句话说,我认为您还需要将 game 变量传递给 init 函数,以便 gameBootStrapper 对象能够访问该变量。所以像这样:

var gameBootStrapper = {
     init:function(gameContainerId, game){
         game.state.add('main', main);
         game.state.start('main');
     }
};    
gameBootStrapper.init('gameDiv', game);

您也可以通过某种方式将 init 绑定(bind)到不同的上下文,但我忘记了如何操作。我必须说,我发现 JavaScript 中的作用域和上下文是棘手且不直观的恕我直言。

关于javascript - 无法读取未定义的 Phaser.js 的属性 add(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49719791/

相关文章:

javascript - 在 Phaser 的多边形区域内约束 Sprite

javascript - 根据内容更改模态高度

javascript - 在鼠标悬停时更改按钮文本,调整整个按钮的大小

javascript - 如何禁用 Javascript 中的放大/缩小按钮?

dart - 尝试在Phaser中加载.mp3文件时发生异常

javascript - Phaser 3 俄罗斯方 block 克隆,但方 block 不会落地

javascript - 拼接后Javascript覆盖数组索引

javascript - 使用相同的类时如何为多个元素设置动画?

javascript - 正则表达式 JavaScript : Remove single charcaters in Text

javascript - 使用 VueJS 和 vue-resource 无限滚动