2008-11-28 50 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的记录,就像你通常存储在它。或者更有可能创建某种自己的存储机制来提高效率。那么你只需要设计一种有效访问数据的方法,这可以考虑到你怀疑需要一次性使用它的事实。 ;)

另一种方式是某种压缩。尽管如此,你必须小心。大多数开箱即用的压缩算法不允许您解压缩流中的任意位置。也许你的地形数据有一些你可以使用的模式?我怀疑它会是完全随机的。更有可能我用相同的数据预测大面积。也许那些可以编码为这样?