主页 > 游戏安装 >

简单的A-寻路替代方案,具有有趣的副作用

发布时间:2019-07-01 10:25 来源:http://www.166sf.com

A *寻路已经成为2D游戏中寻路的事实标准。但是,它确实会对您的关卡设计施加一些。虽然它在基于图块的游戏中运行良好,但我希望能够在世界上的任何像素坐标处随机放置对象。使用大地图和许多单位,计算成本会很高。在这种情况下,开发人员通常只是优化他们的游戏循环,因此不会为每个渲染帧调用算法。由于我的比赛节奏很快,我希望AI能够真正响应移动的玩家,所以我搜索了替代品。

A *寻路的另一个问题是它几乎是完美的。敌人总是采取最佳路径并变得过于可预测。我希望有一些随机和惊喜因素,而不必过多地使AI代复杂化。我也想让一些敌人变得愚蠢,有时候不会“看到”立即联系玩家的方式。但我不希望他们变得太愚蠢而陷入困境。

然后我发现转向和避障。算法更简单,更容易实现,计算成本更低。您可以调整许多参数以获得不同的行为。通过简单的调整,您可以让敌人保卫一些区域,等待攻击直到玩家靠近,作为一个团队,围绕玩家等等。通过一些实验,您可以获得一些看似非常聪明的行为。 / p>

由于我正在制作一个游戏,玩家通常必须与敌人对战才能击中他们,所以我决定让敌人尽可能地让敌人做同样的事情。当敌人距离较远时,他们的首要任务是与玩家对齐,同时靠近足以击中对手:

玩家现在可以向右移动,而不必担心必须排队。此外,如果玩家有远程攻击(投掷斧头,射箭,火球等),他可以简单地开始射击,并且敌人将确保他在到达之前进入射弹的路径。这使得战斗感觉流畅且易于执行。

对于大多数争吵者来说,上述方法就足够了。 Castle Crashers,Rampage Knights和类似游戏设法摆脱了如此简单的AI,因为他们在屏幕中间几乎没有障碍物。对于我的游戏,我希望有更多有趣的屏幕,中间有更多的东西:外面的岩石,树木,灌木丛,坑等,以及建筑物内的家具。所以,人工智能需要对这些人很聪明。

输入障碍物

现在,当我们之间遇到一些障碍时会发生什么。我的做法只是让敌人击中障碍,然后弄清楚如何绕过它:

你如何决定走哪条路?请记住,我们并不是要让敌人成为完美的策划者,因此他们可能会犯错误。一种方法是简单地检查围绕对象的路径将更短。这很好,但我发现只需选择一个随机方向(当上图中的地精击中灌木时向上或向下)效果更好。当你有4-5个敌人追逐同一个玩家时,他们会并使用上部或下部路径绕过那棵树。它使一群敌人的行为看起来更自然。

如果单位有两条路径,其中一条路径明显长于另一条路径怎么办?或者如果其中一条路径走向死胡同怎么办?在没有回到完整的A *寻路的情况下,我们可以简单地让敌人弄清楚他们是错误的转弯并重置他们的'围绕障碍'状态。我们可以有一个简单的变量,说明应该避开障碍需要多长时间,并根据关卡设计和我们想要获得的行为进行调整。

保护一个地区

现在,让我们说你希望敌人保护一个区域并等待玩家靠近?我们根本不需要更改任何AI代,只需关闭关卡的相关部分,并确保它比'最长的路径更长,以便从主AI中转换'变量我上面提到的代。

上图中的绿线表示敌人不会越过的长栅栏,因为绕过障碍物的参数使用的值低于绿线的长度。当玩家靠近屏幕底部时,敌人开始有更高的机会从他们的区域出来攻击他。

这在更复杂的屏幕中非常有用。通过关卡布局自然划分敌人会使游戏更加愉快,因为他可以在多个阶段对抗敌人。

在上图中,您可以

A *寻路已经成为2D游戏中寻路的事实标准。但是,它确实会对您的关卡设计施加一些。虽然它在基于图块的游戏中运行良好,但我希望能够在世界上的任何像素坐标处随机放置对象。使用大地图和许多单位,计算成本会很高。在这种情况下,开发人员通常只是优化他们的游戏循环,因此不会为每个渲染帧调用算法。由于我的比赛节奏很快,我希望AI能够真正响应移动的玩家,所以我搜索了替代品。

A *寻路的另一个问题是它几乎是完美的。敌人总是采取最佳路径并变得过于可预测。我希望有一些随机和惊喜因素,而不必过多地使AI代复杂化。我也想让一些敌人变得愚蠢,有时候不会“看到”立即联系玩家的方式。但我不希望他们变得太愚蠢而陷入困境。

然后我发现转向和避障。算法更简单,更容易实现,计算成本更低。您可以调整许多参数以获得不同的行为。通过简单的调整,您可以让敌人保卫一些区域,等待攻击直到玩家靠近,作为一个团队,围绕玩家等等。通过一些实验,您可以获得一些看似非常聪明的行为。 / p>

由于我正在制作一个游戏,玩家通常必须与敌人对战才能击中他们,所以我决定让敌人尽可能地让敌人做同样的事情。当敌人距离较远时,他们的首要任务是与玩家对齐,同时靠近足以击中对手:

玩家现在可以向右移动,而不必担心必须排队。此外,如果玩家有远程攻击(投掷斧头,射箭,火球等),他可以简单地开始射击,并且敌人将确保他在到达之前进入射弹的路径。这使得战斗感觉流畅且易于执行。

对于大多数争吵者来说,上述方法就足够了。 Castle Crashers,Rampage Knights和类似游戏设法摆脱了如此简单的AI,因为他们在屏幕中间几乎没有障碍物。对于我的游戏,我希望有更多有趣的屏幕,中间有更多的东西:外面的岩石,树木,灌木丛,坑等,以及建筑物内的家具。所以,人工智能需要对这些人很聪明。

输入障碍物

现在,当我们之间遇到一些障碍时会发生什么。我的做法只是让敌人击中障碍,然后弄清楚如何绕过它:

你如何决定走哪条路?请记住,我们并不是要让敌人成为完美的策划者,因此他们可能会犯错误。一种方法是简单地检查围绕对象的路径将更短。这很好,但我发现只需选择一个随机方向(当上图中的地精击中灌木时向上或向下)效果更好。当你有4-5个敌人追逐同一个玩家时,他们会并使用上部或下部路径绕过那棵树。它使一群敌人的行为看起来更自然。

如果单位有两条路径,其中一条路径明显长于另一条路径怎么办?或者如果其中一条路径走向死胡同怎么办?在没有回到完整的A *寻路的情况下,我们可以简单地让敌人弄清楚他们是错误的转弯并重置他们的'围绕障碍'状态。我们可以有一个简单的变量,说明应该避开障碍需要多长时间,并根据关卡设计和我们想要获得的行为进行调整。

保护一个地区

现在,让我们说你希望敌人保护一个区域并等待玩家靠近?我们根本不需要更改任何AI代,只需关闭关卡的相关部分,并确保它比'最长的路径更长,以便从主AI中转换'变量我上面提到的代。

上图中的绿线表示敌人不会越过的长栅栏,因为绕过障碍物的参数使用的值低于绿线的长度。当玩家靠近屏幕底部时,敌人开始有更高的机会从他们的区域出来攻击他。

这在更复杂的屏幕中非常有用。通过关卡布局自然划分敌人会使游戏更加愉快,因为他可以在多个阶段对抗敌人。

在上图中,您可以

上一篇:到2005年,有9500万在线玩
下一篇:'DefunctLand'调查主题公园如何以及为何死亡

相关内容