Sam*_*ari 11 objective-c game-physics ios sprite-kit 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)我的逻辑中是否有明显的缺陷表明这不是我应该首先尝试的?如果是这样,你能不能指出我的缺陷,以便我可以采取更好的做法?
经过相当多的死胡同之后,我注意到实际上有一种方法可以直接操纵车轮的旋转(而不是施加扭矩或冲击),从而相应地影响物理引擎。
诀窍是操纵轮子的物理主体的 angleVelocity 属性,如下所示:
self.rearWheelInstance.physicsBody.angularVelocity = -self.theCar.wheelRadPS; 
// Wheel's angular velocity, radians per second 
// *-1 just to flip ccw rotation to cw rotation 
这样我就可以直接控制驱动轮的转速,而不会失去它们在 SpriteKit 物理模拟中与其他物体交互的能力。这帮助我克服了这个特殊的障碍,我希望它也能帮助其他人。
| 归档时间: | 
 | 
| 查看次数: | 388 次 | 
| 最近记录: |