我想知道lance-gg中是否有一种简单的方法可以仅向每个玩家发送玩家特定数据,而不是向所有玩家发送所有数据。
我希望创建一个扑克游戏,并且不希望每个玩家持有的数据都向所有玩家广播,而只是让每个玩家都收到有关他们自己的牌的信息。
这在当前的GameEngine和ServerEngine之间是否可以轻松实现?
在游戏过程中,需要执行以下步骤:
播放器的卡片也需要存储在服务器上,但不会在每一步都重新播放。
答案 0 :(得分:7)
在Lance中有一个可用于客户端 - 服务器通信的低级网络层。
例如,如果服务器想要将包含数据var list = db.Student.Join(db.School,
s => s.SchoolId,
sc => sc.Id,
(s, sc) => new { s, sc })
.Where(ss => ss.sc.Name=="jack")
.Select(ss => ss.s).ToList();
的事件shakeItUp
发送给所有客户,则游戏的 serverEngine 会调用:
shakeData = { ... }
要向特定玩家发送事件和数据, serverEngine 类可以执行
this.io.sockets.emit('shakeItUp', shakeData);
在建立连接后,客户端侦听来自 ClientEngine 子类的消息:
for (let socketId of Object.keys(this.connectedPlayers)) {
let player = this.connectedPlayers[socketId];
let playerId = player.socket.playerId;
let message = `hello player ${playerId}`;
this.connectedPlayers[socketId].socket.emit('secret', message);
}