有没有一种简单的方法可以阻止敌人站在同一地点?


24

所以:自上而下的游戏,我的敌人追赶玩家,当他们在一定距离之内时便站着不动并开火。如果它们都来自同一方向,则它们最终都将站在同一位置(即彼此“站在”内部),因为我目前不在敌人之间进行碰撞检测-它们可以自由越过彼此。

解决这个问题的简单方法是什么?某种形式的碰撞检测还是某种方式?


1
限制自己进入一个敌人。:P
Kylotan 2010年

Answers:


18

您不需要碰撞检测,但是您将需要给敌人一些情报,并让他们避免相互撞撞。如果没有冲突检测,反正只会使您的敌人看起来很愚蠢-人们彼此躲避,他们通常不会发生冲突。

查找“植绒”以获取一些简单的行为。

基本思想是,事物应朝向玩家,但应远离封闭的障碍物(彼此隔墙,此类事物)。


6
它也被称为波德族。在此处阅读有关包围对象的简单规则:en.wikipedia.org/wiki/Boids 要实施这些限制应该很简单。
Nailer 2010年

12

您可以激发植绒行为,例如Boids

这些通常由3-4个非常简单的规则组成,这些规则正确应用后,会产生非常令人满意且“复杂的外观”行为。

在您的情况下,您可以尝试执行以下操作:

  • 分离(敌人之间的最小半径)
  • 凝聚力(因此他们成群旅行)
  • 对齐(因此它们倾向于沿相同方向移动)
  • 有针对性(他们应该趋向于玩家)

这几乎是JasonD答案的逐字复制。我发誓我在发布之前没有看过它。
egarcia


3

您可能需要查看协作传播(此处是很棒的动画)或某种其他类型的移动对象模型。虽然扩散算法本身并不能阻止敌人越过,但您可以添加其他约束以使其不可能或不可能。


全面披露:可以肯定的是,我在GD的某个地方找到了协作性传播链接,但是我一生都找不到现在提到它的帖子。这真是一个发现。=)
莱安德

这太棒了,但我的复杂性超出了我的需要。无论如何都会阅读白皮书但设法实现了更简单的解决方案。
伊恩

2

如果您不允许穿越其他部队怎么办?在我看来,您迟早会需要它。每当当前路径被某个设备阻塞时,请调整路径以使其围绕该路径移动。


2

Craig Reynold的网站上有一些有关转向和植绒行为的参考。它们的实现相对简单,但是可以产生一些可爱的紧急行为。


这基本上是与其他2相同的答案,但是链接的+1 –该网站是一个很好的参考。
AShelly

1

所有其他答案都会产生更好的结果,但是避免完全分组的最便宜(?)方法是添加一个随机向量,该向量可能是原始计算出的运动向量的25%,以便对象在一般的Blob组中反弹。这不会使事情完全脱离彼此,但是根据您要实现的目标,我发现这可能就足够了。如果您在对象周围绕圈,则对象仍然可以使用此方法进行分组,但是随着时间的流逝它们会逐渐扩散。

这是我几年前制作的一个小游戏,演示了此方法:http : //deleter.phatcode.net/index.php?page=projects&p=4


1

人们总是提出建议,因为这样做会产生很好的结果,但是对于您的特定目的,实施建议可能会过分杀伤力。过去,通过简单地在一个小圆圈内随机分配目标位置,我已经获得了很好的结果。

例如,对于我在Unity中构建的演示,我使用其命令Random.insideUnitSphere进行植绒排球


+1我同意,这一战略的另一个例子(与不重叠的可能有点更好的保证)可以在这里找到:在RTS游戏“Unclutter”单位
MichaelHouse

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.