Заставить персонажа двигаться по кругу

Итак, у меня есть 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 (справа). Я предполагаю, что это действительно элегантное решение, которое я просто пропускаю. Спасибо.


person jett    schedule 20.06.2011    source источник
comment
В этом вопросе нет ничего элегантного, пожалуйста, немного переформатируйте его.   -  person Marcelo    schedule 20.06.2011


Ответы (1)


Поскольку у вас уже есть вектор от центра планеты к игроку, например (x,y), вы можете использовать вектор, перпендикулярный этому (-y,x), в качестве направления силы ходьбы.

person iforce2d    schedule 20.06.2011
comment
редактировать: неважно, я понимаю. Большое спасибо, я не знал, что вы можете сделать это. - person jett; 20.06.2011
comment
Очень хорошее решение, но разве оно не будет работать только для поиска точек на окружности, если центр планеты находится в точке (0,0)? - person Lane Aasen; 20.06.2011
comment
@ LFA2711 Нет. «Вектор от центра планеты к положению игрока» — это просто направление, а не местоположение. Например, если игрок стоит прямо на вершине планеты радиусом 1, этот вектор будет (0,1). Неважно, где в мире находится пара планеты и игрока, отношения между ними одинаковы. - person iforce2d; 20.06.2011