2017-02-22 36 views
0

當玩家點擊座位時,我需要能夠從DOM中刪除按鈕。這樣兩個球員不能坐同一個座位。玩家坐下後,所有按鈕都應該隱藏在客戶端,這樣他們就無法移動座位。我試圖隱藏node.js中其他套接字的按鈕。點擊按鈕後,我的球員我不希望其他球員能夠點擊它

服務器端

socket.on('seat1',function(){ 
     player.x = 380 
     player.y = 300 
     player.number = 1 
     console.log(player) 

    socket.emit('seat1',function(){ 
     hideSeatButtons(); 
    }) 

    }); 

    socket.on('seat2',function(){ 
     player.x = 380 
     player.y = 100 
     player.number = 2 
     console.log(player) 


    }); 

client side 

    var seat1 = function(){ 
     socket.emit('seat1',{ 

     }); 

    } 

    var seat2 = function(){ 
     socket.emit('seat2',{ 

     }); 

    } 


    var hideSeatButtons = function(){ 
     document.getElementById("seat1").style.display = "none"; 
     document.getElementById("seat2").style.display = "none"; 
    } 
+0

因爲兩個用戶可能幾乎同時點擊同一個按鈕(在他們的客戶被通知其他人點擊它之前),所以總會存在競爭狀態。所以,你需要做的是點擊按鈕,然後告訴服務器你點擊了它。服務器會迴應點擊是否成功,或者其他人是否已經點擊了它並且客戶端可以相應地進行操作。當服務器成功點擊一個按鈕時,它可以向所有其他客戶端廣播該按鈕現在已被佔用,並且客戶端可以相應地進行操作。 – jfriend00

回答

0

假設你擁有了一切設置正確,你將需要監聽你從服務器發射事件的客戶端。而不是傳遞發光時的功能,嘗試傳遞一個值或對象(I改變事件的名稱被髮送到客戶端,以避免與意圖用於服務器的事件混亂):

socket.on('seat1',function(){ 
    player.x = 380 
    player.y = 300 
    player.number = 1 
    console.log(player) 

    socket.emit('hideSeats', { 
     seatIndex: 1, 
     playerNumber: player.number 
    }); 
}); 

在客戶端你可以聽'hideSeats'並從那裏調用你的客戶端代碼功能。

socket.on('hideSeats', function(obj) { 
    if (obj.playerNumber === player.number) { 
     hideSeatButtons(); 
    } else { 
     hideSingleSeatButton(obj.seatIndex); 
    } 
}); 

這裏假設你寫一個函數來隱藏單座哪位是什麼,我想你想的誰也不是誰選擇了一個座位一個任何球員做的。對於選擇座位的玩家,您隱藏所有座位。

此方法是否涵蓋您的用例?

相關問題