I'm developing a game on AndEngine (with Box2d) and on iOS Sprite Kit simultaneously. I want the game's physics to be identical on both platforms. Sprite Kit uses Box2d internally for physics simulation and I'm using Box2d-AndEngine to use it in AndEngine.

In Sprite Kit, I use physicsBody.velocity.
In AndEngine's Box2d, I use body.SetLinearVelocity(x,y).

In Sprite Kit, a physics body's velocity vector is measured in meters per second.

What is the corresponding unit of SetLinearVelocity in Box2d-AndEngine?

  • \$\begingroup\$ I would expect them to use the same units. Have you tried it? \$\endgroup\$
    – Anko
    Commented Oct 11, 2014 at 19:53

1 Answer 1


You have to convert screen pixels (or screen points) to meters and vice versa when you are using Box2D for your game physics. Please read section 1.7 of the Box2D documentation for more information on Box2D units and the scale to use for the best results.

In our current game (iOS, universal app), we use a scale of 1.0 / 64.0 for points-to-meters conversion. Works great.

Example using the above scale:

If your sprite is supposed to move at 200 pixels per second, its Box2D body has to move at 200.0 / 64.0 meters per second (i.e. its velocity vector has the magnitude 3.125).

If your sprite is located at pixel position (64, 64) on the screen, its body is located at (1, 1) in meters.

If possible, you set the Box2D body position and velocity (and other simulated properties) once (or at least rarely) and read back the position every frame in order to update the position of the sprite.

  • \$\begingroup\$ Thanks for the information. But I need bit more clarity. So in your app, 64 pixels is equal to one meter/second i.e Is iOS CGVectorMake(75, 75), setLinearVelocity(75/64, 75/64) in AndEngine ? \$\endgroup\$
    – noobgramer
    Commented Aug 12, 2014 at 14:32
  • \$\begingroup\$ I've added an example to my answer \$\endgroup\$
    – Raginmari
    Commented Aug 12, 2014 at 14:54
  • \$\begingroup\$ And yes, while Sprite Kit seems to convert values internally, which is good, you have to do it manually when using AndEngine (we use Cocos2d 2.x which does not wrap physics either), so it should be setLinearVelocity(75 / 64.0, 75 / 64.0). The scale you use does not matter much (I think) as long as you follow the recommendations in the Box2D documentation. \$\endgroup\$
    – Raginmari
    Commented Aug 12, 2014 at 15:14

You must log in to answer this question.

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