我最近开始使用jMonkey引擎,这非常好。但是我在尝试实现相对引力方面陷入困境。

我想使行星彼此绕行(不一定是完美的圆形轨道,取决于速度)。因此,每个对象都应影响其他对象。

我现在所拥有的:

关闭全局引力

bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO);

初始化球体并添加到物理空间
Sphere sphere = new Sphere(50, 50, 5);
Geometry sun = new Geometry("Sun", sphere);

sun.setMaterial(stone_mat);
rootNode.attachChild(sun);
sun.setLocalTranslation(0, 0, 0);

sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5)));
sun.addControl(sunPhysics);
bulletAppState.getPhysicsSpace().add(sunPhysics);

Geometry mercury = new Geometry("Mercury", sphere);

mercury.setMaterial(stone_mat);
rootNode.attachChild(mercury);
mercury.setLocalTranslation(15f, 0, 0);

mercuryPhysics = new RigidBodyControl((float) (5));
mercury.addControl(mercuryPhysics);
bulletAppState.getPhysicsSpace().add(mercuryPhysics);

我注意到RigidBodyControl类中有setGravity方法,但它只是设置方向。因此,对象以这种方式移动,直到消失为止。

我真的很期待得到答案。

最佳答案

子弹物理学中的重力是所有物体的一个方向。

您应该像对待重力一样将重力设置为0,并在每个模拟步骤之后使用以下公式对所有对象施加力

F = m * a

F - force
m - objects mass
a - acceleration

地球上的常规加速度是g == 9.8
在太空中,加速度可能每个都取决于与一个或多个行星的距离。

如果您想模拟《愤怒的小鸟空间》之类的游戏,那么您应该考虑阅读有关该游戏中重力的文章
http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/

09-08 08:17