2013-10-27 3 views
0

Я использую узел & socketi IO для создания простой многопользовательской игры. Когда новый клиент присоединяется, я создаю новый элемент HTML с идентификатором, который является каждым клиентом socket.id.Узел/Socket IO Несколько игроков

Клиенты являются мобильными устройствами, и когда они перемещаются, я отправляю значения «deviceorientation», надеясь дать каждому клиенту контроль над одним из HTML-элементов. Я делаю что-то неправильно, хотя, что я не могу понять, поскольку все, что происходит, - это все клиенты, которые борются за контроль над самым новым элементом HTML, вместо того, чтобы управлять элементом HTML со своим собственным идентификатором сокета.

На сервере:

servio.on('connection', function (socket) { 

    servio.sockets.emit('newplayer',socket.id); 

    socket.on('move', function(data) { 
     socket.broadcast.emit('clientmove', data); 
     console.log(data.myid); 
    }); 

}); 

На клиенте:

iosocket.on('newplayer', function(data) { 
      myid = data; 
      $('body').append('<div class="dot _jsDot" id="'+myid+'"></div>'); 
     }); 

window.addEventListener("deviceorientation", handleOrientation, true); 

     function handleOrientation(event) { 
      var absolute = event.absolute; 
      var alpha = event.alpha; 
      var beta  = event.beta; 
      var gamma = event.gamma; 

      vals = { 
       betaVal  : beta, 
       gammaVal : gamma, 
       myid  : myid 
      } 

      iosocket.emit('move', vals); 
     } 

     iosocket.on('clientmove', function(data) { 

      var x = Math.round(data.gammaVal)*3; 
      var y = Math.round(data.betaVal)*3; 

      $('#'+data.myid+'').css({'left':x + $(window).outerWidth()/2}); 
      $('#'+data.myid+'').css({'top':y + $(window).outerHeight()/2}); 

     }); 

Я надеюсь, что я что-то маленькое, а не какие-то фундаментальном испортить вид. Если кто-то более опытный с узлом & socket io может предложить некоторые советы, это было бы здорово.

+0

Если вы посмотрите на исходный код, используя инструменты Dev в Chrome/Firefox (правой кнопкой мыши -> элемент проверки), имеют ли элементы правильные идентификаторы или все они имеют id = "undefined" или что-то в этом роде? Может быть что-то простое. –

+0

Является ли myid глобальной переменной? Потому что это похоже на то, что вы переписываете идентификатор клиентов всякий раз, когда подключается новый клиент – user1937198

ответ

0

Вы обновляете идентификатор нового игрока от myid. Я предлагаю вам провести различие между ними.

на сервере сделать что-то вроде:

everyone.push(socket.id); // global array of all player ids 
socket.emit('init',[socket.id,everyone]); 
servio.sockets.emit('newplayer',socket.id); 

на клиенте сделать что-то вроде:

socket.on('newplayer', function(data) { 
    myid = data.id; 
    create_div_with(data.id); 
    create_everyone_else(data.everyone); 
}); 
socket.on('newplayer', function(id) { 
    create_div_with(id); 
}); 
Смежные вопросы