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
的图片:
..................................................... ……
最佳答案
我认为这与范围和上下文有关。
您正在从 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/