问题 一种应用zRotation的方法,以便它相应地影响SKPhysicsBody?


假设我有一个代表车轮的SKSpriteNode,圆形SKPhysicsBody成功连接到它上面。显然,该类型将横向滚动2d汽车驾驶游戏/模拟器。

我想要的是自己计算所有的电机内物理,而不是依靠SpriteKit物理引擎。我想完全控制如何计算电机,离合器,变速箱等的机械装置,一直到驱动轮的转速。

从那时起,我很乐意控制SpriteKit物理引擎,然后计算当旋转驱动轮接触道路表面时会发生什么。无论情况如何,汽车前进,减速,加速和/或车轮打滑。

计算获得车轮转速的机制是没有问题的。我只是不确定如何从那里开始。

我可以通过在update:方法中应用zRotation来旋转方向盘,如下所示:

self.rearWheelInstance.zRotation += (self.theCar.wheelRPS/6.283 * timeSinceLastUpdate); // revolutions / 2pi = radians

这样我就可以应用我之前计算过的精确RPM。明显的缺点是,SpriteKit的物理引擎完全没有注意到这种旋转。对于它所知道的一切,轮子从一个相位传送到下一个相位,因此它不会与路面产生摩擦或与其他SpriteKit物理实体进行任何其他交互。

另一方面,我可以向车轮施加扭矩:

[self.rearWheelInstance.physicsBody applyTorque: someTorque];

或角度冲动:

[self.rearWheelInstance.physicsBody applyAngularImpulse: someAngularImpulse];

这确实以SpriteKit物理引擎理解的方式旋转轮子,从而使其与周围环境正确交互。

但除非我遗漏了一些明显的东西,否则它会将车轮视为一个独立于曲轴,传动装置或驱动轴转速的“自由滚动物体”。但实际上,车轮没有任何其他转速的“选择”,而不是通过动力传动系统传递到轴上的转速(除非变速器处于空档,离合器踏板踩下或离合器打滑,但这些都是另一个故事)。

所以: 1)我能以某种方式操纵zRotation,使SpriteKit物理引擎“理解”为旋转运动吗?

要么

2)我的逻辑中是否有一个明显的缺陷,表明这不是我应该首先尝试的?如果是这样,你能不能指出我的缺陷,以便我可以采取更好的做法?


3335
2017-08-13 20:08


起源



答案:


简单的回答,将2d UI设置(如位置和zRotation)与动态物理系统混合在一起并不会产生您想要的结果,正如您所注意到的那样。正如您所说,您需要使用物理模拟的各个部分,如脉冲和角动量。

可能对您有帮助的两个难题是:

物理接头  - 这些可以做一些事情,比如将车轮连接到轴上,以便它可以自由旋转,设置旋转限制,但仍然在其上施加旋转力。

动态调整物理属性  - 例如当用户按下制动器时增加摩擦,角度阻尼或向轴加负加速度。


9
2017-08-13 22:24



谢谢,我有直觉,情况就是如此。我还在思考控制SK物理引擎的确切阶段,以及如何做到这一点而不会失去我所追求的准确性。 - Samuli Viitasaari


答案:


简单的回答,将2d UI设置(如位置和zRotation)与动态物理系统混合在一起并不会产生您想要的结果,正如您所注意到的那样。正如您所说,您需要使用物理模拟的各个部分,如脉冲和角动量。

可能对您有帮助的两个难题是:

物理接头  - 这些可以做一些事情,比如将车轮连接到轴上,以便它可以自由旋转,设置旋转限制,但仍然在其上施加旋转力。

动态调整物理属性  - 例如当用户按下制动器时增加摩擦,角度阻尼或向轴加负加速度。


9
2017-08-13 22:24



谢谢,我有直觉,情况就是如此。我还在思考控制SK物理引擎的确切阶段,以及如何做到这一点而不会失去我所追求的准确性。 - Samuli Viitasaari


在经过几个死胡同后,我注意到实际上有一种方法可以直接操纵车轮的旋转(而不是施加扭矩或冲击力),从而相应地影响物理引擎。

诀窍是操纵wheel的物理体的angularVelocity属性,如下所示:

self.rearWheelInstance.physicsBody.angularVelocity = -self.theCar.wheelRadPS; 
// Wheel's angular velocity, radians per second 
// *-1 just to flip ccw rotation to cw rotation 

通过这种方式,我可以直接控制驱动轮的转速,而不会失去与SpriteKit物理模拟中其他物体交互的能力。这帮助我克服了这个特殊的障碍,我希望它也可以帮助别人。


4
2017-08-21 21:29