我使用socket.join等,所以用户可以加入不同的房间;加入不同的游戏也是我通过网址游戏名称的板子,例如:
本地主机?游戏ID =测试
然后我解析这个名字并开始向这些用户发送电路板。问题是,当我有一个以上,游戏崩溃,房间1的董事会信息崩溃与房间2 ...我无法找到错误,我在这里粘贴代码:
create.html上 jsfiddle.net/svaae1vL/
Enter.html jsfiddle.net/6qzbpbxx/
Server.js jsfiddle.net/1q0qo8xo/
就像我之前说过的那样,问题是:
room1:player1,player2 room2:player3,player4
room1:
[x,o,x]
[0, 0, 0]
[x,x,x]
room2:
[x,o,x]
[0, 0, 0]
[x,x,x]
此外,当我在room1中点击时,它会影响room2,请帮助我坚持到几天......
答案 0 :(得分:2)
我相信您的问题是您在createRoom事件中共享变量emptyBoard
:
boards[data.name] = emptyBoard;
因此,如果您编辑一块电路板,它也会编辑所有其他电路板。尝试将作业更改为:
boards[data.name] = emptyBoard.slice(0);
那应该将数组克隆到另一个对象中。
修改强>
使用slice(0)
克隆数组不会克隆数组中的对象,因此您可能需要深度克隆,例如:正如here所述。
答案 1 :(得分:0)
@Dygestor
嘿,非常感谢你,好吧,这一行:boards [data.name] = emptyBoard.slice(0);
没有修复它,但问题就是你说的,所以我尝试了这个:
// Initalize board.
boards[data.name] = [
['', '', ''],
['', '', ''],
['', '', '']
];
它有效,非常感谢你!