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