在关键时刻与人群打交道的策略


9

最近,我已将游戏引擎从转向行为切换为具有适当时间冲突解决方案的基于冲动的运动。这解决了很多问题(不再需要隧道化,是的),并使模拟更加稳定。但是,稳定性带来了新问题。

门口碰撞问题。

这三个球开始在图像底部附近的旅程,他们的目标是粉红球停下来的地方。在途中,红色和绿色的球卡在了墙的阻塞点。

在此之前,我可以依靠浮点错误和操纵行为的一般不稳定来使绿色和红色的球相互碰撞,直到它们成功通过了阻塞点。现在具有适当的碰撞分辨率,作用在球上的力会相互抵消,从而使球保持完全静止。

通常使用哪些方法来解决这种情况?某种优先级排队系统可能会起作用,尽管一旦我需要在两个以上的对象之间确定优先级,我就会发现它变得很复杂。


我对指导人群管理也感到失望。您能否在问题中添加一些有关“基于脉冲的运动”的链接?
克罗姆斯特,2016年

一时冲动只是力量*时间。我要说的是,我已经使用连续而不是离散的碰撞检测转移到基于物理的模型。转向行为并不真正尊重牛顿运动定律之类的东西,它们被设计为模仿鸟群而不是物理模拟。我真的没有任何Gamedev链接来运动,这实际上只是高中物理。但是,克里斯特·埃里克森(Christer Ericson)的书《实时碰撞检测》几乎是连续碰撞检测的游戏开发者。
鹅卵石

Answers:


3

为每个可移动对象分配唯一索引,并禁止索引较高的对象移动索引较低的代理。这将允许“较旧”的对象轻推“较新”的对象,反之亦然,并且比排队的开销少。本质上,索引充当移动优先级。


1
我已经实现了这一点,并且它的工作原理不再卡住,尽管我不得不说它并不总是很漂亮。注意事项:仅使用索引来确定相同质量的移动物体的优先级,大型物体应自然地将小型物体推开。仅使用索引来确定同一团队中对象的优先级。敌人对象不应仅因为首先生成而具有较高的优先级,就不能充当玩家对象的固定墙。
鹅卵石

我没有考虑过群众或团队;您的调整似乎是修补我的答案的逻辑方法。
皮卡列克

2

增加时间寻找路径

这是一篇讨论该时间立方体的论文:http : //www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf

在此处输入图片说明

这是一个Objective-C的实现:http : //allseeing-i.com/ASIPathFinder

在此处输入图片说明


1
我之前已经阅读并实现了它。即使有多个线程,在我的情况下也没什么用。在RTS游戏中,可以有成百上千个移动的单位和地图网格,它们的边都大于500平方。为每个单元计算基于时间的路径的开销太高了。补充一点,我并不是说rakkarage的答案是错误的,它是一种非常简洁的算法。我只是说,有用的情况受到其复杂性的限制。
鹅卵石

是的,我只是每转一遍重新运行我的整个路径查找算法,而不是完全理解和实现这一点,但我认为我最终可能不得不
Rakka Rage

0

实际上,我不认为您应该修复它。如果(我可能猜到了)箭头指示施加在网格上任何位置(可能是“双线性”或类似方式,或者以某种方式比“ 0/1”更多的“类比”)施加到任何球体的力矢量,那么行为在身体上是正确的,您应该为自己的行为表现良好而感到祝贺。

两个球体坐在那里互相憎恨,因此处于很好的平衡。显然,如果它们向右移动一点,那么向右的“力箭头”对右侧球的影响更大(反之亦然;对左侧球的影响较小;反之亦然),因此它们又移回平衡。这是应该的。

恕我直言,应该固定的是墙壁,球体的大小,或者是建筑石本身中的其他东西。您造成了不可能,在这种情况下的正确行为将导致僵局(抱歉,您滥用单词,无论如何我希望您都能理解它们:-)。

也许改为禁用最近的左/右力箭头,或者以不对称且不鼓励平衡的其他方式排列它们?

我认为,人为修复这将是一个糟糕的修复……太早出现毛茸茸了。


这不能回答问题。我了解您的动机,但最终的问题是如何处理这种情况。我们不知道游戏意图,因此判断是否存在问题取决于Fibbles。更换墙壁可能会改变阻塞点的目的。这个问题是可以解决的有效问题。
Felsir '16

我的回答是卑鄙的:(重新)布置场景中的力或重新布置其他事物,但不要扰乱物理求解器(“ Imho,应该固定的是墙,球体的大小,或者其他固定在砌石中的东西)自己。 ”)。问题是“ 通常使用什么方法来解决这种情况?” 我认为我的A非常是一种“常用方法”,并且非常适合解决该问题。例如,如果环境要求做到这一点,那么在线迷你高尔夫游戏(Q会提醒人们做得非常多)确实会扼杀球。imo不稳定的物理学是一种不好的方法。
暴风城

我同意物理求解器应保持不变。问题是球体应该寻找目标,基本上是如何改变主体的行为(因此不是物理学或关卡布局)。更改关卡布局可以解决这种情况-但会以其他布局出现。因此,问题与您提供的minigolf示例不同,因为在这种情况下,问题是要专门避免死锁。
Felsir

如您所见,我还建议重新安排答案中的力量。在那之后似乎还剩一点:-)。
暴风城

在我看来,重新排列墙壁或更改球体尺寸是不可行的,尽管在其他情况下也是如此。屏幕截图来自RTS引擎的调试模式。单位大小不尽相同,玩家可以随意放置墙壁。您看到的箭头是由我的快速流场算法生成的。它们是归一化向量,用于影响可移动单元的行进方向。由于组中的所有可移动单元共享相同的流场,因此无法更改矢量的长度。
鹅卵石
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.