我当前正在制作一个简单的游戏,用户首先连接,然后输入用户名,然后将其存储起来。

所以问题是我有一个多维数组。但是,当第二个玩家连接时,它将如何知道呢?我需要创建两个吗?如果是这样,它如何知道将其推向何方?

因为我将需要找到.length,所以我可以看到有两个用户。

    var socketStorage = {};
// ===============================================
// GAME LOGIC
// ===============================================
    socketStorage[socket.id] = {};

    socketStorage[socket.id] = {
        username : "username",
        socket : socket,
        currQuestion : {
            answered : false,
            answer : false
        },
        allQuestionsAnswers : []
    };

    socket.on("setusername", function(msg){
      socketStorage[socket.id].username = msg.username;
      console.log(socketStorage[socket.id].username);
    });

最佳答案

您的示例中没有多维数组。您也没有在游戏中进行解释-每个人都同时玩游戏,还是每个人都可以包含彼此隔离的不同玩家的不同游戏?

这是处理此问题的示例方法:我已经有一段时间没有使用套接字了,因此我正在使用您的代码以及对其处理方式的粗略记忆,如有必要,请更正所有错误。

var games = []
var socketStorage = {};
// ===============================================
// GAME LOGIC
// ===============================================
// socketStorage[socket.id] = {}; // <- this line is unnecessary.

socketStorage[socket.id] = {
    username : "username",
    socket : socket,
    currQuestion : {
        answered : false,
        answer : false
    },
    allQuestionsAnswers : []
};

socket.on("setusername", function(msg){
  socketStorage[socket.id].username = msg.username;
  console.log(socketStorage[socket.id].username);
});

socket.on("newgame", function(msg){
  newGameId = games.length;
  games.push([]);
  games[gameId].push(socketStorage[socket.id]);
  socket.emit("newgamecreated", { gameId: newGameId });
});

socket.on("joingame", function(msg){
  var gameId = msg.gameNumber;
  games[gameId].push(socketStorage[socket.id]);
});

socket.on("getgames", function(msg){
  gamesToUsers = {};
  games.forEach(function(game, index) {
    gamesToUsers[index] = game.map(function(socket) {
      return socket.username
    });
  });
  socket.emit("currentgames", gamesToUsers);
});


这是不完整的,而且是难以置信的基础,并且可能有几个错误,但是应该使您足够了解如何执行此操作的概念。每当有人在游戏中做某事时,您只想使用循环将新信息socket.emit发送给同一游戏中的每个人。所以,

socket.on("somethinghappenedingame", function(msg){
  game = msg.gameNumber;
  update = msg.update;
  games[game].forEach(function(socketObj){
    socketObj.socket.emit("gameUpdate", update);
  });
});


希望能有所帮助。

关于javascript - Socket.io和多维数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38172707/

10-12 01:45