我正在使用Flex和Flashpunk框架开发AS3游戏。其中一个要求是我可能使用A *算法进行大量实体移动,碰撞和寻路。
我尝试优化此解决方案的方法之一是让A *函数在有限的地图区域内工作,该地图区域由实体周围的可变网格大小组成。实体的目标和路径通过“感应范围”限制移动到另一个实体的能力有限。
我的想法是,我可以通过仅在需要时搜索小区域来使用A *来获得动态障碍和目标。一旦接收到路径,实体将在检查冲突时移动到第一个节点。如果在途中检测到碰撞,则实体将等待一两秒钟,然后重新检查是否发生碰撞。如果没有找到,继续到节点,重新检查,移动到下一个。如果在延迟之后碰撞仍然存在,这很可能是一个静态障碍,应该重新计算路径。
问题我正在处理我正在使用的实现以及它如何存储此网格数据。目前,地图由一个长度等于网格区域的数组表示。我知道这应该被移动到一个排序列表或二进制堆,但我保持简单,直到我有一些正常运行的东西。
是的,所以这是实际问题:
此网格表示世界位置500,500处的实体的搜索数组。实体精灵尺寸为64x64。实体表示为网格中心的灰色方块。
每个网格中的第一个数字是数组中的索引,第二个是行和列(这是A *函数存储数组的方式),第三个是相对于实体位置的世界坐标。每个网格块代表64x64的区域。
我正在尝试将网格写入世界坐标函数。我有一个路径数组,其中包含路径中每个节点的行/列,但我需要将其转换为相对世界坐标。请注意,0,0坐标位于左上角。
我已经尝试过写这个功能但没有成功,我的数学很糟糕。如果有人知道如何实现这个目标,或者采用不同的方法解决这个问题,我将非常感激。
答案 0 :(得分:1)
好吧,从(0,0)移过(从左到右),我可以从网格到世界
x_world = 372 + 64 * x_grid
同样适用于
y_world = 372 + 64 * y_grid
这有帮助吗?