2011-12-18 133 views
1

目前我下面講一個簡單的gameloop文章Applet的遊戲更新畫面,我可以讓我的比賽會在本地,我可以添加大量的對象和行爲進去。當網絡遊戲狀態改變

文章是這樣的:http://www3.ntu.edu.sg/home/ehchua/programming/java/J8d_Game_Framework.html

我的遊戲是一個格子,而其他球員可以改變一些簡單的矩形。它不需要是最快的方法,但不知何故,我需要一個連接到我的服務器的新線程,並修改將在屏幕上繪製的遊戲狀態。我只是看不到我如何實現它,而不會導致applet線程掛起。

有人可以看到解決這個?

回答

2

你有一個線程的問題,或者是你問如何設計的服務器和客戶端之間的通訊?

對於通信問題,這裏有一個簡單的辦法:已在服務器週期性地發送每一個玩家的更新,無論是通過不斷連接的TCP連接或只是週期性的老式不可靠的UDP數據包。選擇使用哪一個將取決於您的應用要求。閱讀TCP和UDP之間的區別 - 有許多地方,包括SO(只是搜索),討論權衡。一旦你的服務器狀態更新了,你可以通過給服務器一些腳本狀態來驗證這個工作,你也可以用其他方式發送一些數據。根據您的應用程序,您可能需要注意安全性:玩家是否可以對服務器說謊其行爲等等。

在Java中,連接通常通過Socket和ServerSocket類完成,或通過DatagramPacket和DatagramSocket類。

+0

對不起,不清楚。我在問如何設計客戶端。我有一臺服務器,可以像使用telnet一樣使用工具來操縱狀態(並獲取更新)。但我真的不確定我應該如何用GUI設計客戶端。 – 2011-12-18 04:15:13

+0

那麼,你有什麼問題?當您收到數據時,是否需要更新屏幕,但這需要一些時間,並且在忙於重新繪製屏幕時,您不想錯過其他更新? – Gravity 2011-12-18 04:25:24

+0

我需要幫助瞭解如何設計系統。我想我需要一個線程從服務器獲取有關遊戲狀態的信息,當它獲得遊戲狀態時,它需要告訴小程序:嘿,我有更新給你,請畫出來。 我不想在繪圖時錯過更新。 – 2011-12-18 04:31:12

1

我只是看不到如何實現它,而不會導致小程序線程掛起。

執行ActionListener來執行服務器更新/檢查。使用Swing Timer在循環中調用監聽器。有關更多詳細信息,請參見How to Use Swing Timers

+0

難道這不會使遊戲每秒只更新x次,而不是每當有數據發生變化時? – 2011-12-18 04:46:36

+0

這取決於遊戲的設計。例如。如果「敵方船隻」繼續向特定方向移動,直到服務器發送新命令,小程序可以繼續移動船舶,直到另行通知。擴展遊戲的功能以及它的工作原理是一個好主意。 – 2011-12-18 04:55:15