【问题标题】:Socket.io matchmakingSocket.io 对接会
【发布时间】:2018-10-18 00:38:31
【问题描述】:

我正在为一个必须制作多人战舰游戏的项目工作,我已经完成了大部分游戏逻辑(客户端使用 Angular 6,服务器端使用 node.js + express),但是由于我是 socket.io 的新手,我目前一直坚持这一点,我已经设法解决这个问题并尝试连接 2 个玩家:

var waitingPlayer = null;

ios.on('connection', (socket) => {
    console.log('new user connected');
    if (waitingPlayer == null) {
        waitingPlayer = socket;
        waitingPlayer.emit('waitingOpponent', {
            text: "waiting for an opponent"
        });
    } else {
        console.log('Match Found');
        waitingPlayer.emit('matchFound', {
            text: "Match Found",
        });
        socket.emit('matchFound', {
            text: "Match Found"
        });
    }
});

如果我尝试这样做,似乎超过 2 个用户可以连接在一起,有没有办法在将玩同一游戏的 2 个用户之间建立某种大厅,然后为将连接的用户制造更多后?我已经查阅了一些文档,但找不到太多。

【问题讨论】:

  • 看来你需要重置 waitingPlayer。
  • 哦,好吧,我没有意识到,但是我如何才能在游戏中的 2 个用户之间交换数据?

标签: javascript socket.io


【解决方案1】:

使用带有 Socket IO 的 Room 听起来不错。您可以即时创建房间,而 Socket IO 基本上会为您管理它们。因此,您可以为每个单独的“战斗”或游戏创建一个房间。将两个用户放在那个游戏室中。之后,您可以专门向该房间广播。您将需要以某种方式跟踪房间,但这应该给您一个起点。也许如果发生的每场比赛都有自己的唯一 ID,那么房间名称可以是那个 ID。然后,您可以在需要时向该特定房间 ID 广播。

加入:

var gameId = "game_1234";
io.on('connection', function(socket){
  socket.join(gameId);
});

发射:

io.to(gameId).emit('some event');

https://socket.io/docs/rooms-and-namespaces/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2023-03-18
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多