顺畅地走一条路


9

我目前正在制作2D塔防游戏,该游戏具有敌人预定的固定且预定的静态车道(即,塔无法阻挡路径,而寻找路径并不是我要解决的问题)。

我试图弄清楚如何使单位以一种顺畅的方式沿着这条车道行驶。对于如何执行此操作,我有两个粗略的想法,但我希望可以提供一些可能更容易实现/更标准的技术的意见。或者,当然,如果我有一种完全不同的方式,但我从未想到过,我也想学习一下。

航点: 我的第一个想法是将路径定义为一系列硬编码的航点。然后,部队将使用一种基本的“搜寻”操纵算法(例如操纵算法)沿路径依次移动到每个航路点。但是,我想知道是否可能很难阻止这些单位偏离我希望他们遵循的车道。我想知道是否无法足够迅速地转弯会导致他们在期望的车道上出现某种“滑行”。我想虽然可以通过施加相对较大的转向力来防止这种情况发生?

贝塞尔曲线: 我考虑过的第二个解决方案是用贝塞尔曲线定义路径,并在每个时间步计算沿曲线的点的距离(dt *速度)远离设备当前位置。我怀疑这种技术会使精确定义单元将遵循的路径变得容易得多,但是我不知道如何确切地实现这一目标。有什么建议么?

另外,我不认为这会改变任何人的答案,但是单位也必须能够以恒定的速度沿路径行驶。另外,我正在使用pyglet框架在python中对该游戏进行编程。

如果不清楚这个问题,请告诉我。

编辑:同样,无论其价值如何,我都在尝试复制“ 王国拉什”中敌人的移动行为。


相关:gamasutra.com/view/feature/131505 / ...您正在使用哪种相对于瓷砖的单位密度/尺寸?
猴子

我将看一下该文章!我实际上并没有使用图块,只是连续的坐标来指定位置。只会有一个静态背景图片,向玩家显示单位将移动到的位置。
wn牛

我也发现了。gamedev.stackexchange.com/questions/26543/…A *适用于非网格地图。它可能是王国上以类似方式弯曲的节点路径。
猴子

有什么可以导致敌人离开道路而必须返回的道路吗?我问是因为您的贝塞尔曲线建议表明没有,在这种情况下,没有理由您无法预先计算关于整个路径的任意数据,并且不需要“ AI”逻辑。
凯文·里德

Answers:


8

请允许我向您介绍克雷格·雷诺兹(Craig Reynolds)的著名论文“ 自主角色的转向行为”。如果您还没有阅读它,那么应该,它会帮助您解决这些问题,特别是请参阅pathfinding一节

在此处输入图片说明

雷诺(Reynolds)论文的想法是,您可以使用简单的力量相结合,在环境中产生逼真的,即兴的导航。运动不是基于路径规划或整体计算,而是使用本地信息,例如邻居的力量,这使它们易于理解和实施,但仍会产生非常复杂的运动模式。

该方法的优点在于,您可以将几种行为结合在一起。因此,例如,您的角色可能同时具有寻路行为和分隔行为(以防止它们过于拥挤),可以将它们组合为加权总和。

使用操纵行为的另一个好处是,存在许多使用各种语言(例如opensteer)的开源实现。


更新:我看了《 Kingdom Rush》,我想我可能误解了您所说的“平稳”的意思。我认为它的含义更逼真,但我认为您追求的更像是角色在火车上。另外,仔细阅读后,我发现您的要求之一是“单位必须能够以恒定的速度沿着路径行驶”。转向行为不会给您恒定的移动速度,而是简单的寻路结合航路点即可。(即,不要使用“搜索”行为来到达航路点,而只需确定方向矢量并使单元以全速移动到该航路点。)使用更多的航路点可以使路线平滑。


2

您在寻找Gamasutra这篇文章中的解决方案。基本思路是将射线投射到比当前路径点提前两步的路径点上,“步进”射线是细胞长度的一部分,并在每次射线“步进”时检查玩家的碰撞量是否与任何物体碰撞在射线的阶梯位置。如果射线一直到达前两步的航路点,则可以摆脱中间航路点。然后您可以一直执行相同的过程,直至到达“目标”航路点...因此,如果您的路径可以通过一条直线到达目标来完成,那么一条直线到目标就是您的角色所走的路线。这是文章:http : //www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding。

它还包含有关转弯半径和更自然的转弯行为的重要信息,例如...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.