game.state.add()
功能存在问题。出于某种原因,game
未定义:
未捕获的TypeError:无法在main.js的Object.init(main.js:51)读取未定义的属性'add':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
的图片:
.................................................. ......
答案 0 :(得分:1)
我认为这与范围和背景有关。
您正在init
的上下文中调用gameBootStrapper
,并且该上下文中不存在变量game
。换句话说,我认为您还需要将game
变量传递给init
函数,以便gameBootStrapper对象能够到达该变量。所以像这样:
var gameBootStrapper = {
init:function(gameContainerId, game){
game.state.add('main', main);
game.state.start('main');
}
};
gameBootStrapper.init('gameDiv', game);
你也可以以某种方式将init
绑定到不同的上下文,尽管我忘记了如何做到这一点。我必须说我发现JavaScript中的作用域和上下文是棘手且不直观的恕我直言。
答案 1 :(得分:0)
我遇到了同样的问题,这就是我解决的方法。碰巧我正在使用“相位器3”,该相位器现在使用game.scene
而不是game.start
。所以我只是将场景更改为开始,就可以了。