2013-04-06 2 views
0

У меня с трудом получается, чтобы физический движок Chipmunk выполнял то, что я хочу. Единственное решение, которое, кажется, работает, требует некоторой тяжелой векторной математики. Прежде чем погрузиться в эту кроличью нору для других компонентов моей игры, я надеялся, что кто-то сможет наполнить меня лучшим способом, чтобы это сделать. Нужный геймплей выглядит следующим образом:Физика, поверните как автомобиль

  • Персонаж движется по замкнутому пространству в виде сверху вниз
  • Движение всегда постоянная скорость в любом направлении персонаж сталкивается
  • игрок вводит на экране , что приводит к тому, что персонаж «повернется» в касательное положение

Основная идея - это вождение автомобиля. Вы не можете сразу обернуться, но вместо этого сначала должны выполнить разворот. Эта машина также должна поддерживать постоянную скорость. Как я могу это сделать? Бонусный вопрос: как вы можете переопределить любой метод звонков на микрофон, чтобы обновить положение тела, и это хорошая идея?

ответ

1

Существует этот учебник о том, как сделать сверху вниз элементы управления с помощью специально настройки соединения: http://chipmunk-physics.net/tutorials/ChipmunkTileDemo/

Он основан на Бурундук Pro, но материал об управлении характером легко адаптируются к ванильному Бурундуку. Демонстрация «Танк», которая поставляется с источником Non-Pro Chipmunk, реализует почти то же самое, если вы хотите увидеть для него некоторый код C.

+0

Еще раз спасибо за помощь. Этот набор учебников - именно то, что я искал. – Clev3r

0

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

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

dx = playerx - tapx; 
dy = playery - tapy; 
targetAngle = atan2(dy,dx); 
if (phi > targetAngle) 
    { 
    if (phi - targetAngle > PI) omega = rotate; 
    else omega = -rotate; 
    } 
else if (phi < targetAngle) 
    { 
    if (targetAngle - phi > PI) omega = -rotate; 
    else omega = rotate; 
    } 
else omega = 0; 
+0

Я не уверен, что понимаю, что такое phi и omega в этом примере, не могли бы вы уточнить? – Clev3r

+0

Phi - угол, на котором движется игрок, поскольку полная скорость постоянна (Vx = v * cos (phi), Vy = v * sin (phi)), и я назвал скорость омеги вращения, поэтому phi (t + 1) = phi (t) + timeStep * omega. – fibonatic