我想知道 lance-gg 中是否有一种简单的方法可以仅向每个玩家发送特定于玩家的数据,而不是向所有玩家发送所有数据。
我希望创建一个扑克游戏,并且不希望每个玩家持有的数据向所有玩家广播,而是只让每个玩家接收有关他们自己的牌的信息。
这在当前的 GameEngine 和 ServerEngine 之间容易实现吗?
在游戏过程中,需要执行以下步骤:
- 向每个玩家“发”牌(分别向每个玩家发出牌,并且还广播一个事件以指示其他客户端应该动画化正在接收牌的玩家)
- 在要更新的其他数据之外存储和保存发牌
- 如果玩家在牌局期间断开连接并重新连接,则检索玩家卡
- “揭示”牌(向所有玩家广播任何揭示的牌,例如翻牌和摊牌牌)
玩家的牌也需要存储在服务器上,但不能在每一步中重新广播。
Lance 有一个低级网络层可用于客户端-服务器通信。
例如,如果服务器想要发送事件shakeItUp
有数据shakeData = { ... }
对于所有客户,游戏的服务器引擎会打电话:
this.io.sockets.emit('shakeItUp', shakeData);
要将事件和数据发送给特定玩家,服务器引擎类可以做
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);
}
客户端监听来自客户端的消息客户端引擎子类,连接建立后:
// extend ClientEngine connect to add own events
connect() {
return super.connect().then(() => {
this.socket.on('secret', (e) => {
console.log(`my secret: ${e}`);
});
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)