2014-12-20 99 views
0

我有一個用Java編寫的非常基本的視頻遊戲,其中所有圖形顯示在JPanel中。我希望使用UDP網絡來實現這個遊戲的多人遊戲功能。要做到這一點,我需要做的一件事就是發送和接收JPanel,並在客戶端和服務器之間使用UDP進行正確的圖形處理。通過Java UDP聯網發送JPanel

我已經瀏覽了其他使用Java UDP Networking的問題和教程,以瞭解UDP的工作原理,但我仍然不太確定如何實現一個程序,該程序從客戶端發送一個帶有適當圖形的JPanel到服務器,反之亦然使用UDP?

有人可以給我什麼建議嗎?也許有一個難以置信的相似的問題,我只是在研究時錯過了?

謝謝!

+0

組件獲取到當前計算機的本地對等連接,將組件傳輸到另一臺計算機會混淆該組件,並導致意外和不尋常的錯誤 - 不要這樣做!與實際呈現當前狀態所需的信息相比,組件的大小也會相當大。更好地發送狀態,因爲它將更快地傳輸 – MadProgrammer

回答

4

要做到這一點,我需要做的一件事就是使用UDP在客戶端和服務器之間發送和接收帶有正確圖形的JPanel。

這正是我建議你不要做的。相反,我強烈建議您通過網絡發送模型狀態而不是視圖顯示,然後允許每個站點使用模型狀態來構建自己的視圖。這樣做會更有效率,因爲您會在線發送更小的數據集。但請注意,如果您這樣做,那麼您可能需要使用比UDP更可靠的傳輸協議,例如TCP(儘管不一定)。

無論您是通過UDP還是TCP發送數據,都取決於哪個對您的遊戲更爲重要:網絡速度或絕對數據完整性。網絡通信通常是最嚴重的瓶頸。您希望發送一個序列化的JPanel意味着您將通過只需要幾位的網絡發送數千個數據位。

+0

通過模型狀態,你的意思是在JPanel中顯示的遊戲狀態?所以我應該通過UDP網絡發送遊戲的狀態,然後使用給定的遊戲狀態構建自己的JPanel?例如,如果我有一個綠球的JPanel,並且它移動到正確的100像素,並且我通過UDP網絡發送它,我應該發送遊戲中綠球的狀態(如它的新位置)?然後當收到我可以採取的信息,並在新的位置上顯示一個新的JPanel綠球? – Midgar77

+0

@ Midgar77:是的,遊戲的狀態。無論您是通過UDP還是TCP發送它,都取決於哪個對您的遊戲更重要:網絡速度或絕對數據完整性。網絡通信通常是最嚴重的瓶頸。您希望發送一個序列化的JPanel意味着您將通過只需要幾位的網絡發送數千個數據位。 –