因此,我使用 Planet.c 演示为我的 2D iPhone 游戏设置了速度函数,该游戏正在涉及环绕行星的作品。然而,以下代码设置了不错的轨道,但仅围绕屏幕的原点(即屏幕的左下角)进行:
// Point mass position
cpVect p = body->p;
cpFloat sqdist = cpvlengthsq(p);
cpVect g = cpvmult(p, -gravityStrength / (sqdist * cpfsqrt(sqdist)));
cpBodyUpdateVelocity(body, g, damping, dt);
我尝试简单地添加中心恒星位置的位移矢量(在本例中为屏幕中心 cpv(160, 240)),但这只是将它发送到一个奇怪的轨道上。我一直在尝试各种尝试让我的身体的位置矢量和径向矢量相对于中心而不是原点,但我无法让它完全正常工作。我在想一些事情:
// Sun position
cpVect disp = cpv(160, 240);
// Point mass position
cpVect p = body->p;
// Point mass relative to Sun
p = cpvsub(disp, p);
cpFloat sqdist = cpvlengthsq(p);
cpVect g = cpvmult(p, -gravityStrength / (sqdist * cpfsqrt(sqdist)));
cpBodyUpdateVelocity(body, g, damping, dt);
有任何想法吗?谢谢!