2011-06-14 22 views
2

我一直對Wurm Online如何處理動態變化的地圖和對象集合感興趣,同時仍然能夠在普通計算機上運行。我想知道是否有任何關於如何有效再現相同類型的對象管理風格的信息,不僅僅是客戶端,還有服務器能夠管理數據。如何像Wurm Online一樣有效地處理動態對象和地形

+0

這是一個具體的問題。你有沒有試過問開發商?爲什麼讓我們嘗試猜測而不是直接詢問他們? – PeterT 2011-06-14 01:05:12

+0

也許有某種理論或相關材料與如何處理動態地形有關?我沒有在尋找他們的確切實現,我正在尋找方法來有效地實現類似的功能。 – TheDog 2011-06-14 01:50:47

回答

2

查看MineCraft。在這種情況下,'類似的特徵'是通過類似動態二維鏈接列表的「塊」三維數組(也就是說,地形對象的整數ID)來處理....或者我會這麼想。我寫了系統的薄弱克隆一次,這又是這樣的:

struct block_chunk { 
    int[16][16][16] blocks; 
    block_chunk *above; 
    block_chunk *below; 
    block_chunk *north; 
    block_chunk *south; 
    block_chunk *east; 
    block_chunk *west; 
    entity_list *mobs; 
}; 

//standard Linked List 
struct entity_list { 
    entity_list *next; 
    entity *object; 
}; 

struct entity { 
    //blah blah blah 
}; 

這當然不是唯一的方法 - 我也用八分樹寫的實現,這是令人吃驚的更多空間相同效率高達事給予大的連續的區域:

struct block_chunk { 
    boolean is_leaf; 
    block_chunk *TNE; 
    block_chunk *TSE; 
    block_chunk *TNW; 
    block_chunk *TSW; 
    block_chunk *BNE; 
    block_chunk *BSE; 
    block_chunk *BNW; 
    block_chunk *BSW; 

    //the node will either fill all contents with one block, or store a 3D array 
    int *block_fill; 
    int[][][] *blocks; 
}; 

你可能知道了這一切,但如果你想知道怎樣的Minecraft(其中,畢竟,被馬庫斯·佩爾鬆,同樣的亞龍開發傢伙)用這種細節來管理它的服務器地圖,你必須得到你的源代碼 - 因爲有一個充滿活力的修改社區,那就是不是有問題。當然,還有社區文件,這一切都很好(除了所有那些居住論壇的十歲巨魔...)