2011-06-14 48 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(其中,毕竟,被马库斯·佩尔松,同样的亚龙开发家伙)用这种细节来管理它的服务器地图,你必须得到你的源代码 - 因为有一个充满活力的修改社区,那就是不是有问题。当然,还有社区文件,这一切都很好(除了所有那些居住论坛的十岁巨魔...)