所以我使用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);
有什么想法吗?谢谢!
答案 0 :(得分:0)
知道了!我怀疑只是获得正确的向量减法,即中心减去位置向量。做得好!