Mik*_*ter 4 javascript multiplayer socket.io lance
我想知道在lance-gg中是否有一种简单的方法可以仅向每个玩家发送玩家特定数据,而不是向所有玩家发送所有数据.
我希望创建一个扑克游戏,并且不希望每个玩家所持有的数据都向所有玩家广播,而只是让每个玩家都收到有关他们自己的牌的信息.
这在目前的GameEngine和ServerEngine之间是否可以轻松实现?
在游戏过程中,需要执行以下步骤:
玩家的牌也需要存储在服务器上,但不能在每一步重新广播.
有一个低层网络层,可用于Lance中的客户端 - 服务器通信.
例如,如果服务器想要将shakeItUp
包含数据的事件发送shakeData = { ... }
到所有客户端,则游戏的serverEngine将调用:
this.io.sockets.emit('shakeItUp', shakeData);
Run Code Online (Sandbox Code Playgroud)
要将事件和数据发送给特定的播放器,serverEngine类可以做到
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);
}
Run Code Online (Sandbox Code Playgroud)
建立连接后,客户端将侦听来自ClientEngine子类的消息:
// extend ClientEngine connect to add own events
connect() {
return super.connect().then(() => {
this.socket.on('secret', (e) => {
console.log(`my secret: ${e}`);
});
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
382 次 |
最近记录: |