Поэтому я использовал демо-версию 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);
Любые идеи? Спасибо!