2012-05-02 4 views
2

Мне нужно повернуть символ спрайта в соответствии с объемом платформы, на которой он (прямоугольник) стоит или идет дальше. Я добился эффекта, повернув его в соответствии с наклоном платформы, на которой он стоит. Но есть две проблемы:Как плавно вращать персонаж в соответствии с наклоном, на который он идет/стоя?

Во-первых, вращение не является гладким. Когда персонаж ходит от плоской платформы к наклонной, он мгновенно вращается, а также из-за этого поворота он немного подталкивается.

Во-вторых, после того, как он снова уходит со склона и на плоскую платформу, я не могу повернуть символ соответственно. Это связано с тем, что в этот момент персонаж будет сталкиваться как с плоской платформой, так и с наклонной (они помещаются вместе), поэтому в течение нескольких шагов персонаж будет безумно крутиться назад и вперед, потому что две функции обнаружения столкновения работают вместе.

Я попытался решить проблему, обнаружив обрамление персонажа и попытаюсь выяснить, какая точка (слева или справа) его касается чего-то во-первых, но она не работает, потому что я могу обнаружить только столкновение, но не «отсутствие столкновения» или «когда персонаж покидает какую-то платформу».

Прилагаю иллюстрации к ситуации. Пожалуйста, помогите, спасибо!

PS: Мне не разрешено размещать изображения, пожалуйста, посетите: http://i.stack.imgur.com/jqPjt.png для изображения. Благодарю.

+0

Если вы вообще не занимаетесь специальной обработкой, вы получите корпус слева ... нет? Что произойдет, если вы просто позволите двигателю сделать свое дело? – iforce2d

+0

@ iforce2d: Я пробовал это ... но сила, которую я применяю к ней, исходит из центра прямоугольника, а не снизу, поэтому, когда он попадает на уклон, он будет катиться вперед (вместо того, чтобы отступать назад) , Другое дело, что эта игра - своего рода игровая платформа, поэтому я не хочу, чтобы персонаж свободно вращался. – Dai

ответ

2

Ваше вращение кажется выключенным. Вы должны вращаться вокруг базы символьного прямоугольника. Это решит некоторые из ваших проблем, но не все.

В случае, когда персонаж находится в контакте с 2 платформами, необходимо обработать. В настоящее время я предполагаю, что вы просто извлекаете угол непосредственно с платформы и назначаете это персонажу. Это не собирается сокращать его, потому что вам нужны произвольные углы, когда у вас разные точки контакта.

Решение состоит в том, чтобы создать вектор между двумя точками контакта, затем взять компоненты вектора x,y и позвонить по телефону atan2(x, y). Это даст угол между контактами в радианах. Убедитесь, что вы правильно определили параметры! Для разработки игры требуется знание тригонометрии и векторной математики. Что здесь происходит, мы создаем прямоугольный треугольник с выровненной по оси, а гипотенуза определяется двумя контактными точками, затем мы переворачиваем треугольник вокруг и получаем угол, используя tan = opp/adj, путем замены компонентов x и y.

Обратите внимание, что вам нужно быть уверенным, что контактные точки всегда указываются в определенном порядке, или вы окажетесь вращаться под странным углом, потому что создаваемый вами треугольник будет направлен в другое направление. Возможно, вам сначала понадобится сделать что-то вроде сортировки, основанной на координате x.

1

Простым решением для этого примера является обнаружение столкновений по углам, а не по всему объекту. Вы можете вращать объект в точке, касающейся таким углом, что точка, которая разрезает только касание. Это решение работает только при наклоне, а не вниз. Чтобы решить эту проблему, вы также обнаруживаете столкновения по сторонам. Затем вы вращаетесь на касающемся углу таким углом, чтобы сторона просто касалась.

+0

Извините, не могу отметить как принятые ответы (и я еще не в состоянии повышать, буду делать, когда я получу достаточную репутацию). В box2d я фактически не могу получить точную точку контакта, выполнив обнаружение столкновения на всем объекте, как вы сказали. Я пытаюсь установить несколько датчиков в углах объекта и использовать их для определения угла поворота. Спасибо. – Dai