2017-02-22 4 views
0

プレーヤーが座席をクリックすると、ボタンをDOMから取り除く必要があります。このように2人のプレーヤーは同じ座席を取ることができません。プレイヤーが座ってから座席を動かすことができないようにすべてのボタンをクライアント側に隠す必要があります。私は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

2人のユーザーがほぼ同時に(同じクライアントが他のユーザーがクリックしたことが通知される前に)同じボタンをクリックする可能性があるため、常に競合状態が発生します。それで、あなたがする必要があるのは、ボタンをクリックして、それをクリックしたことをサーバーに伝えることです。サーバーは、クリックが成功したかどうか、またはあなたとクライアントがそれに応じて行動する前に他の誰かがそれをクリックしたかどうかを返信します。サーバーがボタンのクリックに成功すると、サーバーは他のすべてのクライアントにブロードキャストして、そのボタンが現在取得されていることをクライアントがそれに応じて動作させることができます。 – jfriend00

答えて

0

あなたが適切にすべてを設定していると仮定すると、あなたは、サーバーから放出されたイベントのために、クライアント側でリッスンする必要があります。

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

これは、あなたが私はあなたが席を選んだものではありません任意のプレーヤーのためにやりたいと思うものです-whichシングルシートを非表示にするには、関数を記述を前提としています。座席を選んだプレイヤーは、すべての座席を隠します。

このアプローチは、あなたのユースケースをカバーしていますか?

関連する問題