socket.io多人游戏玩家的观点

时间:2016-07-21 01:49:44

标签: node.js socket.io

我是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);
}

如果您可以指向与此相关的教程或博客,那也很棒。谢谢。

3 个答案:

答案 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)

答案 2 :(得分:0)

您需要为每个客户端提供某种ID,并告诉每个客户端何时连接,他们的ID是什么。当客户端连接时,为它们生成一个随机唯一ID,然后将其发送回给他们,以便他们知道他们的ID。当您发回其他玩家的数据时,客户端可以根据ID确定哪些数据是他们的,并将其显示在右侧区域。