2013-10-27 50 views
0

我正在使用節點& socketi IO創建一個簡單的多人遊戲。當一個新客戶端加入時,我創建一個新的HTML元素,其ID爲每個客戶端的socket.id。節點/套接字IO多玩家

客戶端是移動設備,當他們移動時,我發送'deviceorientation'值,希望讓每個客戶端控制其中一個HTML元素。儘管我做了一些不正確的事情,但我無法弄清楚,因爲發生的一切都是客戶爲了控制最新的HTML元素而鬥爭,而不是用自己的套接字ID來控制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更有經驗,可以提供一些建議,那會很好。

+0

如果你看一下使用的Chrome/Firefox瀏覽器開發工具(來源右鍵 - >檢查元素),元素是否具有正確的ID或者它們是否都具有id =「undefined」或類似的東西?可能是那麼簡單。 –

+0

myid是一個全局變量嗎?因爲無論何時連接新客戶端,它都會覆蓋客戶端ID – user1937198

回答

0

您正在將每個人的myid更新爲新玩家的ID。我建議你區分兩者。

在服務器上

做這樣的事情:

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