如果冲量太小,SKPhysicsBody球将无法弹跳。

5
我有一个无限弹跳球模拟程序,它能正常工作。球会在屏幕边界上无限弹跳。
但是有一个小问题,如果起始冲量太小,球就无法弹跳。
我尝试了一下,最终发现我的球需要至少2.1的起始冲量才能弹跳。
ball.physicsBody!.applyImpulse(CGVectorMake(-2.1, -2.1))

如果将值设置为2,则球永远不会开始弹跳,它只会停在左下角。
ball.physicsBody!.applyImpulse(CGVectorMake(-2.0, -2.0)) //ball stops

我曾经看到过一个回答这个问题的问题,但我忘记了如何找到它。我知道SpriteKit有一些下限,使得移动物体在发生碰撞时停止。

如果我能找到那个答案就太好了。此外,如果有一种方法可以覆盖它,并使物体以较慢的起始冲量弹跳,那就太好了,谢谢。

编辑:所以我重新找到了另一个问题,SpriteKit ball loses all energy hitting wall, restitution=1

所以我的新问题是,有没有办法设置或降低SpriteKit中的速度阈值?我希望我的球能够移动得更慢。

编辑:有人能回答吗?


1
你需要更具体一些。你想让球移动得更慢是指什么?你想应用线性阻尼吗?还是想将球的速度设置为一个恒定向量? - Andriko13
我希望在速度低于b2_velocityThreshold的情况下,球仍然能够保持弹性碰撞。因此,我需要以某种方式设置这个限制。这在我链接的问题中有更好的解释。 - shwick
我明白你的意思。目前我唯一看到的解决方案是使用一些自定义物理学(因为常规物理学不能满足你的需求d:)。我的做法是检查碰撞/接触发生的时间,并反转球的速度。例如,如果球击中上下边界,则应用一个y-脉冲,其值为原始值的负数,同样适用于击中水平边界和x-脉冲。 - Andriko13
谢谢,我会考虑这个选项。这似乎是一个经常发生的事情,人们想要缓慢移动的物体。不知道为什么设置起来不容易。 - shwick
我从未需要让任何东西以如此缓慢的速度弹跳,你需要它做什么用途? - Andriko13
显示剩余2条评论
1个回答

0

你的球是有重量的。

就像现实世界中一样 - 如果你用很小的力量去推一个椅子,它不会移动,因为它有重量。

然而,如果你用更大的力量推,椅子就会开始移动,但它不是从0.1牛的力量开始的(这实际上取决于重量、摩擦力和其他几个因素)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接