我正在开发一款地图为 16000 X 9000 单位的游戏,如果我在地图上的任意 X、Y 点,我可以看到最多 2000 单位的半径。我想要一些东西,无论我是否访问过某个特定地区,我都可以从中进行管理。主要问题是我应该采用一系列布尔值吗?访问的布尔值太大[16000*9000]。所以想要建议,谢谢。我是stackoverflow的新手,如果我不是重点,对不起。
user6683031
问问题
573 次
2 回答
1
如果您需要发现的区域是圆形的(您使用“半径”意味着),您必须使用这个巨大的阵列,是的。
如果它不必是一个完美的圆,那么你可以简单地进行下采样:假设你使用 10 个块的粗糙度 - 那么你只需要一个 1600x90 大小的数组 - 与完美圆相比减少了 100 倍。
于 2016-08-05T14:54:05.063 回答
0
使用类型数组确实效率低下bool
。主要是因为bool
C++ 中 a 的大小可以非常大。(在我的平台上,它的长度为 8 位,这意味着其中的 7 位未被使用。)C++ 标准没有指定sizeof(bool)
.
请考虑使用 astd::vector<bool>
代替:这是一个明确的特化,std::vector
并且 C++ 标准保证这是紧密打包的:即没有浪费空间。如果您难以获得一个连续的内存块,您可能需要一个。std::vector<std::vector<bool>>
综上所述,有些人不喜欢bool
矢量专业化,所以在深入研究之前请仔细考虑这一点。(有一个运动考虑将其安排为弃用!)
或者,您可以自己将图形的各个区域合并为一组整数类型,例如unsigned
.
于 2016-08-05T14:52:20.710 回答