2016-03-02 46 views
0

我正在開發一個使用javafx的小型遊戲多人遊戲。我有一個對象Map,它擴展了類AnchorPane。這張地圖包含一些擴展類Rectangle的「Tiles」。 類Map和Tile實現了Serializable。通過套接字發送javafx矩形/窗格

我想要的:

服務器創建地圖,但不顯示它。每次玩家連接時,都會發送地圖。

事情是,我收到它後(客戶端)顯示地圖,它什麼也沒有顯示......每塊瓷磚都在地圖上,但沒有顯示。

問題1:AnchorPane和Rectangle沒有實現Serializable,這是爲什麼地圖不顯示任何東西?即使我使用實現Serializable的「自定義」對象?

問題2:更普遍的是,它是實現多人遊戲的好方法嗎?我的意思是,在每次操作後有一臺帶MapController的服務器發送地圖,還是每個客戶端都有它自己的地圖,服務器發送由客戶端執行的命令更好? (如創建新的播放器,移動播放器....)

+1

一般規則:不要在套接字上發送「視圖」(GUI)對象,因爲這是不必要和低效的。而是發送代表模型狀態的數據。 –

回答

3
  1. 不是真的有可能來回答,由於缺乏問題的代碼,但是這是可序列化將序列聚合對象的任何對象。如果那些對象不是來自實現可序列化的類,你將會得到一個異常。你應該在某個地方看到例外情況,除非你正在擠壓它們(即try { /* code */ } catch (IOException exc) { /* do nothing */}),這是非常糟糕的做法。
  2. 您應該發送數據通過流,而不是您的數據視圖。所以你應該有一個「模型」類來代表你需要的數據;如果你想使用對象序列化作爲你的通信協議,你可以很容易地創建序列化。在客戶端保留視圖類(即UI類),並在接收時使用模型中的數據更新它們。
+0

謝謝你的回答。事實上,我應該發送數據而不是視圖繞過我的第一個問題。 – IronRabbit