2017-07-25 58 views
0

我正在編程一個基於六角形網格的遊戲,您在其中點擊相鄰的玩家貼圖時,以及玩家移動地圖/網格時向相反方向移動(在主jframe內的jpanel上使用setLocation(),這樣相對於屏幕來說,玩家仍然居中。我傳入我的GameBoard類的構造函數中,最大數量的六邊形高度,我希望網格位於中間和單個六邊形的半徑,並且它工作得很好(在某種程度上)。六角形格柵在生成流出框架時被切斷

當我傳入足夠多的六角形時,一些網格會在jframe外部產生(與普通的1080x1920大小的顯示器一樣高和寬)。當發生這種情況時,我仍然可以讓玩家四處移動並打開菜單並更改玩家皮膚,但是當在網格上向北移動時(當網格的頂部是在jframe外部生成的)時,網格會被切斷,在整個六角形重新粉刷之前結束。

我想知道是否有解決這個問題,也許我只是簡單地被忽視的方式。我的第一個想法是每次玩家移動並且根本不使用setLocation()方法時,用新的x,y座標刪除並重新生成網格,但我覺得這樣做效率很低,而且更多的是暴力解決方案(last採取)。我只是覺得必須有一個更優雅或有效的方式。即使在一般方向稍有微調,也將不勝感激。我已經玩弄了setSize(),setMinimumSize()和setPreferredSize()方法來嘗試使jpanel或jframe的內容窗格變大。

圖片的幫助:

You can see that I can obviously highlight those hexagons and even move onto them and move back off as illustrated by the player's path being shown.

+0

這個問題可能更適合於https://gamedev.stackexchange.com/順便說一下 –

回答

0

該解決方案真的取決於您的具體要求。你確實需要區分可見窗口和虛擬畫布。你可以想象你的視圖框架是一個比你所看到的世界更大的窗口。

如果你的地圖的大小從一開始就知道,建立一個緩衝/幀,可以根據適合它。

如果大小事先不知道或者是無限的,那麼你就需要程序上一代的瓷磚。說瓷磚時,我不是指六角形瓷磚,而是指您將它們塗抹在上面的緩衝區/框架。一旦框架邊框被擊中,您需要在該邊上附加一個新框架。

+0

在我的情況下,我知道尺寸將基於傳入的六角形和半徑的數量。 – JoshuaK98

+0

那麼那麼那麼你只需要計算所需的緩衝區/窗格/框架/畫布(不管你想要的名稱)大小並使用它。使用屏幕尺寸只適用於「窗口」,而不適用於「世界」。 –