使快的东西变慢(Box2D)


9

我正在开发一款游戏,您可以控制投石机向对手投球。

这就像一个名为“中世纪围攻”的游戏。当投石机摆动手臂时,玩家需要抓住最佳时机按下按钮并释放球。然后,球将以切线角度飞行。 在此处输入图片说明 我现在的问题是,投石机的手臂摆动太快,以至于玩家无法抓住正确的时刻。同时必须如此之快,否则不能扔得足够远。并且有一根细绳将球和投石机臂连接起来,如果臂摆动太慢,则当臂移动时,球只是悬在绳上。

我通过切换步长来解决问题,每当手臂摆动时,我都将步长从1/60更改为1/200。一旦球员放开球,球便回到了1/60。

除了我的游戏适用于具有网络功能的多人游戏外,这还算不错。因此,更改步骤可能会导致问题。

我能想到的另一种解决方案是让它缓慢摆动,但是当玩家释放球时,我会在保持球方向的同时手动向球上增加速度。我不太喜欢这种解决方案,因为它看起来很假,但我仍然有一个问题,就是除非球非常短,否则球只是挂在弦上。

请对此有所说明,谢谢!


编辑

感谢大家的投入,我通过使手臂缓慢摆动来解决问题,并在玩家释放球时抓住球的速度和两倍。它看起来与更改步长大小完全相同。我只需要做一件事。因为手臂的摆动非常缓慢,所以球只是悬在手臂末端而不是摆动。我通过在挥杆期间和仅在挥杆期间在球上施加与重力相等的力来解决此问题。然后它不再挂在那里,而是与手臂一起摆动。

@MrCranky的答案很详细,看起来很可行,所以我接受。:)


也许您可以缓慢移动投石机,但要增加作用在球上的力?我以前没有使用过Box2D,如果这是一个愚蠢的主意,请对不起。除此之外,我唯一的猜想是摆弄球的质量,看看较重或较轻的球在较慢的速度下是否可以为您提供可接受的结果。另外,可能值得研究现实生活中的投石机的物理原理。这些看上去有些慢,所以也许有关它们的数据(大小,弹药,力量等)可能会给您一些模拟想法。
基督教徒

2
要使计算机物理学表现得像“真实事物”一样,真的很困难。几乎所有物理引擎都模拟刚体,这意味着像投石机臂的弯曲之类的影响都无法说明绳物理或材料行为是否准确,因此没有“作弊”的精确模拟几乎是不可能的。接近看起来真实的东西的过程有点像这样:调整,调整,调整,作弊,调整,调整,作弊,作弊,调整,重新开始,调整,调整,调整,调整,作弊,调整,作弊,作弊,调整。
LearnCocos2D

4
小猫大炮使用到这一问题的最现实的方法:人类真的坏在操纵物理现实和需要机器帮助,如果你想给的投石机的“感觉”是缓慢移动足够一个人手动控制,但启动要比实际速度更快,您可能想要创建一个纯艺术性的动画“射击”,然后根据用户中断动画的位置生成球。
MickLH 2013年

Answers:


3

我本能地说,我们缺少了需要回答的大部分上下文,这就是“为什么多人游戏方面会阻止您更改时间步长?”

如果您想通过网络连接共享物理仿真,那么,通常这是一件非常困难的事情。模拟非常容易发散,尤其是在网络连接可能丢失数据包的情况下,很难将所有内容放在一起。

对于您的问题,最简单,最可靠的答案是使用可变的时间步长。当您临近决策时刻时,不要将物理仿真每经过一秒钟更新一秒钟,而是将其更新半秒或另一个合适的数值。由于它是一种集成效应,您可以通过在决策窗口内简单地将更新速率降低到较低速率就可以摆脱困境,但也可以快速向下插值到较低速率。无论哪种方式,您实际上都是在回放慢动作的物理模拟。它应该表现得非常准确,只是速度慢到足以让玩家做出决定。我不会考虑使用任何其他方法来欺骗物理学,以使其发挥作用,它们很可能全部都变得可怕而又感觉不到“正确”。

现在我们回到网络实施。如果没有更多信息,我想您有两种选择。首先,如果您正在与另一方进行同步操作。因此,当一个玩家必须放慢速度做出决定时,请平均放慢两个玩家的速度。对于不开火的玩家,这可能会感到烦恼和奇怪,因为这会混淆他们自己的反应时间。

对于第二个,想象一下两个投石机互相射击。投石机需要10秒钟才能投掷,发射窗口在T + 5s开始。P1在T + 0时开始发射周期,在T + 5s时将其本地物理模拟速度降低50%。他们需要15秒才能玩完整个周期。因此,在T + 5s,P1告诉P2开始全速播放10s发射周期。因此,P1看到投掷周期需要15s,P2看到需要10s,但是两个玩家都看到周期在T + 15s结束。当P1实际释放时,他们告诉P2在概念周期中何时释放。因此,如果P1在T + 10时释放,那么实际上在整个10s发射周期中是7.5s。然后,P2可以在T + 12.5s(在周期的本地回放中为7.5s)显示释放,并且两个玩家模拟都应该在周期中的相同物理点发射了射弹。

因此,在第二种方法中,您不再需要同步进行模拟。您正在运行两个独立的模拟,但是要跟踪玩家的输入。如果双方都被告知玩家在发射周期的7.5秒内被释放,则他们都应就弹丸将在何处着陆达成共识。但是在实践中,这可能会非常迅速地分开,并且您将需要以某种方式同步模拟状态。


0

为什么不仅仅复制/适应已经存在并且可以在类似情况下运行的内容?

在此处输入图片说明


0

如果投石机运动太快,则显而易见的解决方案是延长时间以使其变慢。也就是说,在物理仿真中,每一秒的实时时间仅经过0.1秒。现在,从玩家的角度来看,球的移动速度将慢10倍。

实际上,还有另一种方法可以达到相同的效果:除了缩放时间以外,还可以缩放所有以时间(包括时间)为单位的物理常数。例如,重力加速度的单位是速度/时间=距离/时间²,因此,如果重力是游戏中唯一的常数,则将其比例缩小100 =10²可获得与将时间降低10倍相同的效果。 。

当然,如果您的物理模型包含以时间为单位的其他常数(或速度=距离/时间,或加速度=距离/时间²等),则如果要保持轨迹不变,则也必须缩放这些常数。 。

请注意,实际操作的距离是有限制的:如果您将速度减慢了100倍,那么投石机将很容易控制,但玩家也可能无聊地等待着发射后,球会慢慢飘落下来。如果这是一个问题,则您可能需要采用其他答案中建议的更高级的技巧,例如在投石机射击时使用非常慢的时间缩放,但在发射球后切换到更快的时间缩放。


谢谢,但是您可能看不到我的编辑。是的,我用您回答中的最后一种方法解决了它
Arch1tect
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.