如何解决如何像Wurm Online一样有效地处理动态物体和地形
| 我对Wurm Online如何处理动态变化的地图和对象集同时仍然能够在普通计算机上运行感兴趣。我想知道是否有关于如何有效地重现相同类型的对象管理样式的信息,这不仅在客户端方面,而且在服务器上都可以管理数据。解决方法
参见《我的世界》。在那种情况下,“相似特征”是通过诸如“块”的3D数组的动态2D链接列表(即地形对象的整数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(毕竟是由同样的Wurm家伙Markus Persson开发的)如何使用这种细节来管理服务器地图,您将必须获得源代码-由于存在一个充满活力的改装社区,所以这不是问题。当然,还有社区文档,这些文档都很好(除了所有居住在论坛中的十岁巨魔……)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。