そこで、Planet.cデモを使用して、惑星の周回を伴う作業中の2DiPhoneゲームの速度関数を設定しました。ただし、次のコードは適切な軌道を設定しますが、画面の原点、つまり画面の左下隅の周りでのみ設定します。
// 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);
何か案は?ありがとう!