0

今天,我有一个关于在多维数组中存储对象/结构或其他一些值的一般性问题。

实际情况如下,但我可能在很多其他地方都需要类似的解决方案,这就是为什么我想问你这个最佳实践的原因。

假设我们有一个横向滚动游戏。现在我需要将有关世界细胞的信息存储在某种二维数组中,其中 0:0 将是起始位置。在游戏开始时,我生成了世界的一小块区域,比如从 -10:-5 到 10:5。玩家可以左右移动(有时上下移动),所以当他到达世界的边缘时,我必须生成更多的世界信息。现在我的问题是:我应该如何存储具有不同极端值的二维数组?有没有关于如何做到这一点的最佳实践?你会怎么做?

再次感谢你的帮助!

4

2 回答 2

4

不要将其存储为数组,使用包含坐标和值的结构。

然后将这些对象存储在更智能的结构中——双端队列、列表或树,具体取决于需要如何搜索它们。

于 2013-09-29T19:00:12.670 回答
1

解决方案#1:使用一维数组size == dimension1*dimension2*dimension3*....并模拟多维数组。您将不得不编写自己的调整大小代码(应该很容易)
解决方案#2:使用稀疏数组。Astd::map<Coordinate, Value>会做。
解决方案#3Boost.MultiArray
解决方案#4:不要将世界存储为 N 维数组。将对象存储为 list/deque/whatever,然后使用 BSP 树、八叉树、扫描和修剪或空间分区来快速定位可见区域中的对象。

于 2013-09-29T19:29:55.910 回答