2013-04-11 2 views
1

Мне не удалось найти это после очистки форумов. Я хотел бы реализовать что-то вроде этого ... главный герой всегда движется в направлении, в котором он находится. Когда игрок коснется экрана, персонаж повернется лицом к месту касания, которое должно заставить тело двигаться в другом направлении.Бурундук Физика: Поворот тела плавно

я могу получить символ столкнуться с сенсорным месте следующим образом:

CGPoint diff = ccpSub(location, self.position); 
CGFloat targetAngle = atan2f(diff.y, diff.x); 
self.body->a = targetAngle; 

Я хочу что-то вдоль этих линий. Получите текущий угол, с которым сталкивается персонаж. Поверните этот угол в единичный вектор. Умножьте этот единичный вектор на max_velocity и примените его к символу. Это должно (теоретически) перемещать персонажа в направлении, с которым он сталкивается с постоянной скоростью?

Это, кажется, чтобы дать мне то, что я хочу:

cpVect rotatedVel = cpvmult(ccpForAngle(self.body->a), MAX_VELOCITY); 
self.body->v = cpvlerpconst(self.body->v, rotatedVel, ACCELERATION * dt); 

Теперь мне нужно, это способ повернуть направление персонажа медленно в течение долгого времени. Как я могу это сделать?

ответ

0

Похоже, что вы хотите сделать что-то вроде этого из бака демо бурундук в:

// turn the control body based on the angle relative to the actual body 
cpVect mouseDelta = cpvsub(ChipmunkDemoMouse, cpBodyGetPos(tankBody)); 
cpFloat turn = cpvtoangle(cpvunrotate(cpBodyGetRot(tankBody), mouseDelta)); 
cpBodySetAngle(tankControlBody, cpBodyGetAngle(tankBody) - turn); 

«поворот» вычисляется относительно текущего вращения тела путем преобразования направления вектора относительно текущего вращения тела. Демонстрация сглаживает вращение с помощью ограничений (которые вы также можете рассмотреть здесь), но вы также можете просто избавиться от использования cpflerpconst() на «повороте», чтобы получить максимальную угловую скорость.

0

Как использовать cpBodySetTorque, чтобы установить крутящий момент объекта, чтобы заставить его вращаться/вращаться?

Смежные вопросы