【问题标题】:Sending "secret" data to individual players in Lance Game在 Lance Game 中向单个玩家发送“秘密”数据
【发布时间】:2017-06-04 08:28:26
【问题描述】:

我想知道 lance-gg 中是否有一种简单的方法可以只向每个玩家发送特定于玩家的数据,而不是向所有玩家发送所有数据。

我希望创建一个扑克游戏,并且不希望将每个玩家持有的数据广播给所有玩家,而是只让每个玩家接收有关他们自己的牌的信息。

这在当前的 GameEngine 和 ServerEngine 之间是否容易实现?

在游戏过程中,需要执行以下步骤:

  • “发”牌给每个玩家(分别向每个玩家发出牌,并广播一个事件以指示其他客户端应该为收到牌的玩家设置动画)
  • 在要更新的其他数据之外存储和保存发牌
  • 如果玩家断开连接,然后在牌局中重新连接,则检索玩家卡
  • “展示”牌(向所有玩家广播任何展示的牌,如翻牌和摊牌牌)

玩家的卡片也需要存储在服务器上,但不是每一步都重播。

【问题讨论】:

    标签: javascript socket.io multiplayer lance


    【解决方案1】:

    Lance 中有一个底层网络层可用于客户端-服务器通信。

    例如,如果服务器想要将事件shakeItUp 和数据shakeData = { ... } 发送给所有客户端,游戏的serverEngine 会调用:

    this.io.sockets.emit('shakeItUp', shakeData);
    

    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);
    }
    

    客户端在连接建立后监听来自ClientEngine子类的消息:

    // extend ClientEngine connect to add own events
    connect() {
        return super.connect().then(() => {
            this.socket.on('secret', (e) => {
                console.log(`my secret: ${e}`);
            });
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      相关资源
      最近更新 更多