2008-11-28 52 views
2

我正在開發一個網絡遊戲。這場比賽的地圖至少2000公里到2000公里。我希望能夠以某種粒度級別對高程和地形類型進行編碼 - 例如100米×100米。遊戲地形數據庫模型

對於2000公里通過2000公里地圖在百米桶存儲該信息將意味着由20000 20000元件或在數據庫中的總400,000,000記錄。

有沒有其他的方式來存儲這種類型的信息?

更多信息

地圖本身不會永遠顯示完整。單位將以回合制方式在地圖上移動,玩家將獲得他們所在位置以及當地區域的反饋信息。地形將決定速度和禁止移動。

我想我想說的是地圖將用於遊戲,而不一定是用於圖形或顯示的目的。

回答

1

我會以不同的方式對待它,通過分離地形類型和高程。

  1. 地形類型,我認爲,不爲迅速改變高程 - 有可能是上伸展比粒度的最低水平長得多的同類型地形的部門。我會根據性能,內存和其他要求將這些扇區映射到數據庫記錄或某種散列表。

  2. 海拔我會假設是半連續的,因爲它在大部分情況下會逐漸變化。我會嘗試將這些值映射到一組連續函數(不連續的部分之間的不同集合,如突然改變的高程)。對於地形高程相同或可以用簡單函數描述的任何一組座標,您只需要定義該函數覆蓋的範圍。這應該減少大量需要記錄的信息來描述地形中每個點的高程。

所以基本上我會分解地圖成組成的不同扇區(X,Y)的範圍中,一旦對於地形類型,一次用於地形高程,並建立一個哈希表中的每個可返回適當的值根據需要。

0

如果你想要的粒度,你正在尋找,那麼沒有明顯的方式來做到這一點。

你可以嘗試一個二維小波變換,但這非常複雜。像傅里葉變換這樣的事情可以做得很好。另外,你可能不會用地面記錄的方式來存儲地形;擁有某種可存儲編碼矩陣的數據庫字段更有意義。

2

這取決於你想如何生成你的地形。例如,您可以程序化地生成所有圖像(使用低分辨率地形/高度圖的插值 - 作爲兩個「位圖」存儲 - 從xy座標系中隨機插入,以確保地形不變形),並使用最小值存儲。 如果你想完全定義地形的地區,可以單獨存放這些在適當情況下,隨機產生其餘的使用它們。)

如果你想完全定義的地形,那麼你將需要考慮某種壓縮/流媒體技術的,只拉地形時,你當前感興趣。

0

我認爲,通常的解決辦法是向上突破您的域名爲可管理的規模的「磚」。您必須添加一點邏輯才能在任何給定時間加載適當的磁貼,但不是太糟糕。

你不應該需要同時訪問所有信息 - 即使每個百平方米桶佔據了屏幕上的一個像素,屏幕無我知道的可以一次顯示20K X 20K像素。

而且,我不會用一個數據庫 - 看看高度映射 - 有效地使用黑白色&其像素值表示高度。

祝你好運!

0

這將是非常大量的信息,無論你看它哪一種方式。 400,000,000個網格單元將收費。

我看到了解決這個問題的兩種方法。首先,因爲它是一個基於Web的遊戲,你也許可以得到一個服務器有體面大小的硬盤和400M的記錄,就像你通常存儲在它。或者更有可能創建某種自己的存儲機制來提高效率。那麼你只需要設計一種有效訪問數據的方法,這可以考慮到你懷疑需要一次性使用它的事實。 ;)

另一種方式是某種壓縮。儘管如此,你必須小心。大多數開箱即用的壓縮算法不允許您解壓縮流中的任意位置。也許你的地形數據有一些你可以使用的模式?我懷疑它會是完全隨機的。更有可能我用相同的數據預測大面積。也許那些可以編碼爲這樣?