我是nodejs和socket.io的新手。我正在尝试实时创建一个简单的多人纸牌游戏。我现在的问题是,从玩家的角度来看,我无法让玩家的视图显示在正确的div
上。例如..我希望我的比赛区域显示在底部框中,我的对手显示在顶部框中,同样与我的对手的观众一起显示。他会看到自己在底部div上,看到我在顶部div。你如何让这种效果发挥作用?
客户端
<div class='top'></div>
<div class='bottom></div>
<script>
var socket = io();
socket.on('playerinfo', function(data){
$('.top').html(data[0]);
$('.bottom')html(data[1]);
});
</script>
服务器
var players = [];
io.on('connection', function(socket){
//player is given 'P' with random number when connection is made to represent username
socket.name = "P" + Math.floor(Math.random() * (20000));
players.push(socket.name);
io.emit('playerinfo', players);
}
如果您可以指向与此相关的教程或博客,那也很棒。谢谢。
答案 0 :(得分:1)
您可以通过某种独特性区分自我和其他用户,例如,唯一性是用户电子邮件或用户ID。
解决方案1:
在建立套接字连接时,也发送用户ID / email,您可以将其存储为套接字对象本身的一部分。因此,当player1进行一些移动时,在发出时发送id以及您发送的任何数据。
解决方案2:
当player1做了一些移动时,您将向服务器发送数据,同时发送数据,也发送用户ID /电子邮件。并且在服务器中再次发出用户ID。
在客户端,您可以检查 - 如果id是self,则在底部更新。如果id不是self,则更新顶部。 注意:如果您有多个对手玩家,仍然可以处理此问题。
实施例
在客户端:
$(":submit").click(function (event) {
// add exception to class skipDisable
if (!$(this).hasClass("skipDisable")) {
$(this).hide();
$(this).after("<input type='submit' value='"+$(this).val()+"' disabled='disabled'/>");
}
});
在服务器中:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<form>
<input type="submit" value="hello">
</form>
答案 1 :(得分:0)
看看这个7部分教程。我认为它可以让你很好地了解Socketio在典型的多人游戏中需要做些什么:
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-1/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-2/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-3/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-4/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-5/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-6/
http://www.tamas.io/online-card-game-with-node-js-and-socket-io-episode-7
答案 2 :(得分:0)
您需要为每个客户端提供某种ID,并告诉每个客户端何时连接,他们的ID是什么。当客户端连接时,为它们生成一个随机唯一ID,然后将其发送回给他们,以便他们知道他们的ID。当您发回其他玩家的数据时,客户端可以根据ID确定哪些数据是他们的,并将其显示在右侧区域。