我正在使用NODE JS和socket iO进行游戏
在我的主文件(index.js)中,当一个人连接并登录时,我将它们作为对象添加到我的播放器池中。在玩家对象中,我存储了他们的套接字,所以当他们在游戏中时,我可以实时向他们发送事件
var index ={};
index.playerPool = [];
添加播放器
socket.on("user_information",function(info){
//when the user sends me their user information lets create a new player object.
checkIfPlayerExistsInMap(info.user_id);
var player = new playa.playa();
player.name = info.name;
player.picture = info.picture;
player.email = info.email;
player.user_id = info.user_id;
player.socket = socket;
将玩家添加到游戏
var ngame = new game.game();
var id = getNewGameId();
p.current_game_id = id;
ngame.created = id;
index.currentGames[String(id)] = ngame;
var ng = index.currentGames[String(id)];
ng.addPlayer(p);
这在我的游戏中运行良好(大约4分钟)。突然间,当我发出某个事件时,我对player.socket的引用将不再起作用。
我尝试记录对象,我得到以下内容
connected: false,
disconnected: true,
我的套接字IO客户端是否有断线连接的原因?我一直随机发送我的客户数据(IE我有一个大厅倒数计时器和游戏启动时的通知效果很好),当一个玩家失去时我怎么也不能向我的任何一个客户发出一个事件我发现这个奇怪?
版本:
{
"name": "socket-chat-example",
"version": "0.0.1",
"description": "my first socket.io app",
"dependencies": {
"express": "~4.8.7",
"socket.io": "~1.0.6"
}
}
我原本以为这与我在客户端上运行间隔功能这一事实有关...但是当我把它们拿出来时问题仍然存在
我还尝试了一个回调函数给发出“玩家丢失事件”的套接字......然后我的套接字才发出一个事件。我也尝试了一个io。发射只是为了确保我的客户端完全连接..这是有效的。
所以我觉得引用没有正确地保存在我的对象中?
有没有人有这方面的经验?
这就是我尝试在游戏类中发出我的事件的方式
var p = index.index.playerPool[String(my_id)];
p.socket.emit("player_left",player_id_leaving);
再次适用于大厅倒计时,并在游戏开始前通知玩家其他玩家已离开等。