node.js + socket.io를 사용하여 멀티 플레이어 게임을 만들고 있습니다. 플레이어는 각 방에 최대 3 명의 플레이어가있는 방으로 그룹화됩니다. 알고리즘은 방의 수를 추적하고 최신 방의 플레이어 수를 방 번호로 확인하는 것입니다. 최신 방의 플레이어 수가 3 명 이상인 경우 프로그램에서 방 번호를 증가시키고 다음에 참여할 소켓/플레이어가 새 방 ("room"+ roomNumber)에 참여합니다. 내가 겪고있는 문제는 이전 방이 3 명의 플레이어가있을 때 플레이어가 새로운 방에 합류하더라도 이전 플레이어가 새로운 방으로 이동한다는 것입니다. 내 코드의 어떤 부분이이 동작을 일으키는 지 알지 못합니다.Node.js + Socket.io : 한 방에서 다른 방으로 이동하는 플레이어
var players = [];
var player;
var playerUsernames = [];
var express = require("express");
var socket = require("socket.io");
var app = express();
var server = app.listen(3000);
app.use(express.static("public"));
function Player(username) {
this.username = username;
}
var io = socket(server);
var roomNumber = 1;
setInterval(distributor, 33);
function distributor() {
io.sockets.in("room" + roomNumber).emit("distributor", players);
}
io.sockets.on("connection", transmitter);
function transmitter(socket) {
io.of('/').in("room" + roomNumber).clients(function(error,clients){
var numClients = clients.length;
if (numClients > 3) {
roomNumber++;
}
});
io.of('/').in("room" + roomNumber).clients((error, clients) => {
console.log(clients); // Problem: Displays that players in room 2 include all of the players in room 1
});
socket.join("room"+roomNumber);
socket.on("player", playerMsg);
function playerMsg(data) {
player = new Player(data.username);
if (playerUsernames.indexOf(data.username) == -1 && data.hp == 100) {
players.push(player);
playerUsernames.push(data.username);
}
else {
var index = playerUsernames.indexOf(data.username);
players[index] = player;
}
}
socket.on("players", setPlayers);
function setPlayers(sentPlayers) {
players = sentPlayers;
playerUsernames = [];
for (var i = 0; i < players.length; i++) {
playerUsernames.push(players[i].username);
}
}
}