我试图制作一个实时战略游戏,如星际争霸或帝国时代。我的地图必须支持多达约1500个实体。我的问题在于如何在不延迟游戏的情况下实施战争迷雾。我最初尝试的方法是每次移动时简单地计算到一个单元的所有周围区域的距离,但正如我预期的那样,由于许多单元将不断移动,因此这种情况滞后。如果有人知道更快的algorythim战争迷雾,请帮助。地图将基于图块并存储在数组中。
答案 0 :(得分:4)
一个非常基本的实现可以如下:
可见性由每个图块v[i,j]
的值(i,j)
给出。任何低于某个阈值的值都在雾中。
使用以下两个步骤更新常规时间步骤(注意:除非是非常特殊的情况,否则不需要高精度或高频率):
v[i,j]
unit
增加值v[unit_i, unit_j]
一个恒定的数量。如果单位在一个正方形上(无论有多少单位),你也可以添加一个恒定数量的。答案 1 :(得分:4)
另一种解决方案:为您的实体装箱。
您可以创建相对备用的网格,甚至是四叉树。给定坐标(x,y)
,它允许您在log(d)
步骤中查找位于相同(或相邻)单元格中的所有实体,其中d
是四叉树的深度。
在绳索的帮助下(来自叶子节点的指针指向相邻的单元格),访问邻居可以在一个恒定的时间内完成。
要了解给定的地图图块是否可见,您只需要查询四叉树。
此外,四叉树可能对与战争无关的其他任务有用。例如。您可能希望找到距离给定坐标(x,y)
最近的“工人”,或者您想对区域内的所有单位应用一些区域伤害。
答案 2 :(得分:1)
每次一个单位移动,你可能会认为它移动到邻近的瓷砖,不是吗?在这种情况下,您还可以假设此单元的可见区域也沿同一方向移动一个图块,因此您应该可以确定或更新应该可见的区域。根据单元的视距,只更新需要更新的值可能会节省大量CPU能力。
问题是应该模糊的区域 - 可以有更多的单位看到相同的牌,但这可以通过做霍华德的建议来解决。