Page 1 of 1

Physics not simulating after altering tutorial program

Posted: Sat Oct 08, 2011 4:34 pm
by Sami
Just downloaded this wonderful library to prototype some ideas (may even use it for the actual thing!), and have hit a snag at the get-go. I'm experimenting with the physics module and have been altering the tutorial example. I have set the world to be 1 metre per pixel as it makes things far more intuitive. The largest dynamic body that gets created is 2 metres/pixels in radius.

The issue is... the ball just sits there in the air and isn't affected by gravity. I've set gravity to be the standard constant of 9.8, but changing that to be higher didn't make any difference. The entire program is listed below - any help is appreciated. There may be some quirks of Love/Box2D that I'm missing.

Thanks in advance :)

Code: Select all

function love.load ()

  world = love.physics.newWorld (0, 0, 650, 650)
  world:setGravity (0, 9.8)
  world:setMeter (1)

  objects = {}

  objects.ground = {}
  objects.ground.body = love.physics.newBody (world, 650/2, 625, 0, 0)
  objects.ground.shape = love.physics.newRectangleShape (objects.ground.body, 0, 0, 650, 50, 0)

  objects.ball = {}
  objects.ball.body = love.physics.newBody (world, 650/2, 650/2, 10, 0)
  objects.ball.shape = love.physics.newCircleShape (objects.ball.body, 0, 0, 2)

  love.graphics.setBackgroundColor (104, 136, 248)
  love.graphics.setMode (650, 650, false, true, 0)

end

function love.update (dt)

  world:update (dt)

end

function love.draw ()

  love.graphics.setColor (72, 160, 14)
  love.graphics.polygon ("fill", objects.ground.shape:getPoints ())

  love.graphics.setColor (193, 47, 14)
  love.graphics.circle ("fill", objects.ball.body:getX (), objects.ball.body:getY (), objects.ball.shape:getRadius (), 10)

end

Re: Physics not simulating after altering tutorial program

Posted: Sat Oct 08, 2011 4:44 pm
by bartbes
The forces you are using are probably too small for objects of this size, you make a ball with a 2 meter radius of 10kg, that thing is going to be floaty as hell.
setMeter means you can just use your normal pixel input and it will automatically convert it to something more sane, (the default) 30 is generally pretty good, as that means a default window is 20 meters high.

If you, however, decide you do want to go do things this way (and Box2D explicitly tells you it is bad at simulating the movement of 'buildings'), you should either set higher weights or use setMassFromShapes.

Re: Physics not simulating after altering tutorial program

Posted: Sat Oct 08, 2011 4:55 pm
by Sami
A mass of 10kg with gravity of 9.8 acting on it should give it a weight of 98kg, i.e. that of a not exactly skinny human. Or am I mis-understanding how the gravity vector works?

edit: note that increasing the mass doesn't make the object move, nor does increasing the gravity, and nor does increasing them all.

edit 2: I'm aware Box2D says not to simulate large objects using this, which is why I am using small objects (4m is okay I take it?). Pixels aren't used as zooming in and out will be a part of the demo (when it gets past this stage), thus I want to keep the physics as decoupled from the current zoom level as possible.

Re: Physics not simulating after altering tutorial program

Posted: Sat Oct 08, 2011 7:32 pm
by Ensayia
Something to keep in mind if you are going to be working with Box2D, you may want to wait for the release of LOVE 0.8.0 in the near future. The API is getting completely overhauled and will no longer work with you current code.

Re: Physics not simulating after altering tutorial program

Posted: Tue Feb 07, 2012 12:52 pm
by molul
I'm having a similar issue as the OP. I don't quite understand how this physics module works. If I set the world's gravity to (0,9.8) and create a 15kg object, shouldn't I see it fall faster? I've also set 1 meter to 100px, which I think will fit in my future project. However, the ball's fall seems too slow to me. Could someone clear this up for me, please?

Thanks in advance :)

Re: Physics not simulating after altering tutorial program

Posted: Tue Feb 07, 2012 1:44 pm
by tentus
I don't think that setGravity works how you think it does. Notice that in the original tutorial the y parameter is set to 700, which is heckuva different from 9.8. Yes, I know that gravity is 9.8 m/s^2, but I don't think that Box2D knows that.

Re: Physics not simulating after altering tutorial program

Posted: Tue Feb 07, 2012 2:10 pm
by molul
Perhaps gravity should be set to 980... I'm gonna look for Box2D gravity info.