Итак, у меня есть 2D-игра, в которой обычно есть только гравитация и «плоские» уровни, однако я добавил «планеты», у которых есть собственная гравитация.
У меня есть функция addForce(float xForce, float yForce), которую я использую для перемещения своего персонажа. Так скажем, если бы я вызвал player.addForce(1, -1); игрок будет двигаться вверх и вправо (хотя и немного). Это отлично работало на уровнях с обычной нисходящей гравитацией, однако с планетами это не так. Существует еще один поплавок, называемый earthAngle, который:
atan2(player.getY()-earth.getY(), player.getX()-earth.getX());
Что я сделал для кода прыжков на планетах:
player.addForce (cos (угол земли) * 1500, грех (угол земли) * 1500);
который хорошо работает. Однако я застрял на том, как заставить персонажа ходить по планете.
В настоящее время для кода движения у меня есть:
player.addForce(25*x_*cos(угол земли), 25+x_*sin(угол земли));
который работает только на некоторых частях и работает наоборот на нижней части, а также сильнее/слабее на некоторых частях, x_ может быть либо -1 (слева), либо 1 (справа). Я предполагаю, что это действительно элегантное решение, которое я просто пропускаю. Спасибо.