如果脉冲太小,SKPhysicsBody 球不会反弹

Posted

技术标签:

【中文标题】如果脉冲太小,SKPhysicsBody 球不会反弹【英文标题】:SKPhysicsBody ball won't bounce if impulse is too small 【发布时间】:2014-10-25 19:14:28 【问题描述】:

我有一个可以正常工作的无限弹跳球模拟。球永远在屏幕边框周围弹跳。

一个小问题是,如果启动脉冲太小,球一开始就不会反弹。

我进行了实验,最终发现我的球需要至少 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

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

编辑:有人吗?

【问题讨论】:

您需要更具体。让你的球移动得更慢到底是什么意思?你想应用线性阻尼吗?是否要将球的速度设置为常数向量? 我希望球在速度低于 b2_velocityThreshold 时继续发生弹性碰撞。因此我需要以某种方式设置这个限制。在我链接的问题中对此进行了更好的解释。 我明白你在说什么。我现在看到的唯一解决方案是使用一些自定义物理(因为常规物理不能满足您的需求 d:)。我要做的是检查何时发生碰撞/接触并反转球的速度。例如,如果球击中上限或下限,则应用与原始值相反的 y 脉冲,击中水平边界和 x 脉冲也是如此。 谢谢,我会考虑将其作为一个选项。这似乎是经常发生的事情,人们想要缓慢移动的物体。不知道为什么它不容易设置。 我还不需要让任何东西反弹得那么慢,你需要它有什么目的? 【参考方案1】:

你的球有重量。

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

但是,如果你用力推,椅子会开始移动,但不是从 0.1 N 的力开始移动(这实际上取决于重量、摩擦力和其他一些因素)。

【讨论】:

以上是关于如果脉冲太小,SKPhysicsBody 球不会反弹的主要内容,如果未能解决你的问题,请参考以下文章

添加 SKPhysicsBody 会导致 SKSpriteNode 抖动

SKPhysicsBody的奇怪行为

DC/DC尖峰脉冲吸收电路

SpriteKit SKPhysicsBody 像一扇门一样的方向碰撞你只能穿过但不能回来

FBG光纤光栅反射器的特点

使用 SpriteKit 的球滚动和转动效果