2013-08-09 3 views
0

после нанесения на тело Box2D:Box2D Как передать оставшийся импульс от одного тела к другому

b2Vec2 force = b2Vec2(velocity.x/PTM_RATIO, velocity.y/PTM_RATIO); 
    _body->ApplyLinearImpulse(force,_body->GetPosition()); 

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

Как это можно сделать правильно? Есть идеи?

ответ

0

Это довольно странное мышление, чтобы решить проблему. Вы никогда не останавливаете символ или какие-либо объекты среды. Пусть они ведут себя так, как они делаются box2d. У вас есть все, что добавлено к одному корневому узлу какого-то типа, вашей среде и персонажу. Что вы делаете, это создать своего рода «контроллер камеры», и вы указываете символы CCSprite или объекты обертывания, если они есть, в качестве цели. В функции обновления, которую вы вызываете каждый кадр, вы изменяете положение корневых узлов таким образом, чтобы центрировать экран на символе. Вы можете реализовать следующие задержки, плавную прокрутку и другие приятные функции по мере необходимости.

К сожалению, я вообще не использую Cocos2d, поэтому я не могу дать вам пример кода. Данное решение будет работать для Cocos2d, так как это недалеко от двигателя, который я использую на своем рабочем месте.