5
\$\begingroup\$

I have been trying to make a box2d body move along a Bezier curve/ arc path. Most of the posts I've seen recommend an approach of manipulating SetLinearVelocity and SetTransform to arrive at an arc-like movement. I don't think testing linear velocity values on a try and error basis would help. I would appreciate any help solving this problem. Thanks.

\$\endgroup\$
3
2
\$\begingroup\$

If you don't need to worry about stuff running into it simply use Body.SetPosition().

If you do then make sure its a kinematic body so its not bumped off course. You should know the time delta the physics engine is going to be updated by. So we can use that to find a direction and velocity that will cause us to be where we want to be after the step has occurred.

I haven't slept in about 24 hours so hopefully I have this right.

Vector3 travelThisStep = (Target - Body.GetPosition()); //How much we need to travel to arrive at our destination
float velocity = travelThisStep.Lenght() / TimeStep; //Distance to travel / Time to travel said distance
travelThisStep.normalize();
Vector3 velocity = travelThisStep * velocity;
Body.SetLinearVelocity(velocity);

World.Step(TimeStep);
\$\endgroup\$
3
  • \$\begingroup\$ sorry I've not been on gamedev for a few days. Thanks for the answer. I am just trying to figure out how it'll work using Cocos2d since that's what I use for game development. That's the main reason I included the Cocos2d tag at first. \$\endgroup\$
    – allenalex
    Sep 10 '12 at 14:45
  • \$\begingroup\$ So your not sure how to fix a Cocos2D sprite over your Box2D body? \$\endgroup\$ Sep 10 '12 at 14:47
  • \$\begingroup\$ does Vector3 translate to a b2Vec2 in Box2d? I don't get how the Timestep is calculated, could you explain this a bit further. Because I know the timestep to usually be a function. \$\endgroup\$
    – allenalex
    Sep 10 '12 at 16:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .