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
  • \$\begingroup\$ Do you want a steering approach (where it TRIES to follow a bezier curve but possibly being diverted by other objects) or do you want absolute movement along the path? \$\endgroup\$ Commented Sep 7, 2012 at 14:07
  • \$\begingroup\$ @MikaelHögström: sorry, I've not been on gamedev for a few days. yes, I am interested in the steering approach. \$\endgroup\$
    – allenalex
    Commented Sep 10, 2012 at 14:54
  • 1
    \$\begingroup\$ related stackoverflow.com/questions/12272369/… \$\endgroup\$ Commented Dec 16, 2017 at 21:06

1 Answer 1

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
    Commented Sep 10, 2012 at 14:45
  • \$\begingroup\$ So your not sure how to fix a Cocos2D sprite over your Box2D body? \$\endgroup\$ Commented Sep 10, 2012 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
    Commented Sep 10, 2012 at 16:23

You must log in to answer this question.

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