2016-07-21 165 views
1

我对nodejs和socket.io非常陌生。我正试图创建一个简单的多人纸牌游戏实时。我现在的问题是我无法从玩家的角度让玩家的视角显示在正确的div上。例如,我希望我的比赛区域显示在底部框中,我的对手要显示在顶部框中,并且与我的对手的观众一样。他会看到自己在底部的div,并看到我在顶部div。你如何才能达到这个效果?socket.io多人游戏玩家的视图

客户

<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
+0

谢谢。在发布这个问题之前,我已经浏览了大部分内容。当我从不同的浏览器查看时,我没有具体找到我需要的关于玩家在不同地点的位置。 – lys916

0

你需要给每一个客户某种身份证,并告诉每个客户端连接时,它们的ID是什么。当客户端连接时,为他们生成一个随机的唯一ID,然后将其发回给他们,以便他们知道他们的ID。当您发回其他玩家的数据时,客户可以根据id找出他们的数据并将其显示在正确的区域。

1

您正在通过某种唯一性权利区分自我和其他用户,例如唯一性是用户电子邮件或用户标识。

解决方案1:

在制作socket连接,发送用户ID /电子邮件也,你可以存储为Socket对象本身的一部分。因此,当玩家1做了一些动作时,发送ID也会随着您发送的任何数据一起发送。

解决方案2:

当PLAYER1做了一些举动,你将数据发送到服务器,同时发送数据,也发送用户ID /电子邮件。并在服务器再次发出用户ID。

在客户端你可以检查 - 如果id是self,那么在底部更新。如果id不是self,则更新顶部。 注:如果你有多个对手球员,你仍然可以处理这个。

例:

在客户端:

<script> 
    var socket = io(); 
    var selfId; 
     socket.on('playerinfo', function(data){ 
     selfId = data.name; 
     playerInfo = data.players; 
     $('.top').html(playerInfo); 
     $('.bottom')html(selfId); 
     }); 
     socket.on('move', function(data){ 
     if(data.uid == selfId) 
     { 
      $('.top').html(data.card); 
     } 
     else 
     { 
      $('.bottom')html(data.card); 
     } 
     }); 
     socket.emit('move', {card:A, uid:56836480193347838764}); 
    </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)); 
    // Here may be you can assign the position also where the user is sitting along with the user name. 
    //players will be an array of object which holds username and their position 
    //So that in client you can decide where the user will sit. 
    players.push(socket.name); 
    io.emit('playerinfo', {'players':players, 'name':socket.name); 
    socket.on('move', function (data) { 
    socket.emit('move', data); 
    }); 
} 
+0

谢谢你。我将用它与游戏逻辑的一部分。但是我试图实现的是......当我加入或坐在桌子上时,我会说,类似于扑克桌。在我的浏览器中,即使我选择坐在最上面,我也会看到自己坐在桌子底部的中央。但在其他人或对手浏览器上,他们会根据用户的观点看到我坐在顶部,左侧或右侧。 – lys916

+0

好的。是否你不能使用playerInfo类似?你需要有一些链接对象,它说发出的是你的信息或其他信息的权利。 – jerry

+0

我得到它的工作,谢谢。我给每个用户一个唯一的ID使用socket.id时,他们进行连接,然后将每个ID推入数组。然后我会将数组发送到客户端。在客户端上,我将使用socket.io.engine.id检索每个用户的socket.id,然后将其与数组进行比较以获取每个用户的id的索引。与索引我会做一些如果发言,以获得我想要的每个用户的确切位置。 – lys916