SpriteKit游戏场景中的重力值

问题描述 投票:-2回答:1

我正在尝试使用Apple的SpriteKit游戏引擎来创建游戏。

[虽然在游戏中执行了一些基于物理学的计算,但我注意到计算的结果不同于物体发生的有效变化。

[示例:通过projectile motion的方程式计算物体的轨迹会使物体实际上比所计算的物体更快/更快地掉落。

在计算与重力有关的东西时,如何使物理引擎与现实世界的物理定律匹配?

swift sprite-kit physics skphysicsbody skphysicsworld
1个回答
-1
投票

Edit-我创建了一个示例项目,以演示带或不带乘法器的计算路径。

https://github.com/emilioschepis/spritekit-gravity-sample


TL; DR-在SpriteKit中计算与重力相关的事物时,将场景的重力乘以151即可获得准确的结果。


[尝试解决此问题时,我首先开始阅读与重力有关的SpriteKit文档:

https://developer.apple.com/documentation/spritekit/skphysicsworld/1449623-gravity

文档说:

此属性的组件以米/秒为单位进行度量。默认值为(0.0,-9.8),代表地球的重力。

但是,重力是在m/s^2中计算的,而不是在m/s中计算的。

认为这是在SpriteKit中实现重力的一个错误,我开始认为也许无法在场景中应用基于现实世界的物理定律。

但是,我确实遇到了另一个有关线性重力场的文档页面,该页面正确地报告了在SpriteKit的m/s^2中测量了重力。

https://developer.apple.com/documentation/spritekit/skfieldnode/1520145-lineargravityfield

然后,我建立了一个简单的自由落体场景,在该场景中,我对物理物体施加了初始速度,然后计算了预期的轨迹,同时将其与实际轨迹进行了比较。

x轴的计算从一开始就很准确,这表明唯一的问题在于重力值。

然后我尝试手动修改场景中的重力,直到实际轨迹与预测的轨迹匹配。

[我发现是在游戏中使用物理世界的重力属性时,必须将〜151的“魔术”值考虑在内。

例如修改轨迹的y轴计算

let dy = velocity.dy * time + 0.5 * gravity * pow(time, 2)

to

let dy = velocity.dy * time + 0.5 * 151 * gravity * pow(time, 2)

导致准确的计算。

我希望这对以后可能遇到相同问题的任何人都是有用的。

© www.soinside.com 2019 - 2024. All rights reserved.