我在为我的游戏运行算法时遇到了一些问题,希望这里有人可以帮助我。谷歌似乎不是一个很好的帮助,因为大多数解决方案只适用于完整的瓷砖。
在游戏中,单位可以在一个棋子内占据不同的位置,即它们可以在左上角,中心,右下角,... 棋子的位置(2/3),即(2.2/3.1),(2.5/3.5) ), (2.8/3.9)。
如果他们从位置 (2.2/3.1) 移动到 (5.7/4.1),我需要检查路径中是否有障碍物。
我目前的算法是:
- 从(2.2/3.1)开始
- 计算运动的角度(即70度)
- 朝那个方向移动 0.1 步
- 检查我在哪个瓷砖上(地板(pX)/地板(pY))
- 从 2 开始重复
该算法有效,但对我来说它看起来不是很有效,因为障碍物只能是完整的瓷砖,而不是瓷砖的一部分(单位不会碰撞)。如果我增加步长,我开始错过仅略微交叉的瓷砖(即您只穿过左下角)。即使步长为 0.1,仍然有可能错过障碍。
我试图找到一个解决方案来获取子地图(所有带有角落的瓷砖(地板(start.X)/地板(start.Y))和(ceil(start.X)/ceil(start.Y)),移动穿过每块瓷砖并在数学上检查它是否越过。遗憾的是,我似乎缺乏这项检查所需的数学知识。
我的最后一个想法是将图块的所有 4 个边界作为一条线并进行线相交,但这似乎比我原来的方法慢。
有什么提示吗?
谢谢。