-- Example: Avalanche of LOVE -- Contains all the balls. balls = {} -- Contains all the boxes. (Terrain) boxes = {} function love.load() -- Fat lines. love.graphics.setLineWidth(2) -- Load images. images = { green = love.graphics.newImage("green_ball.png"), big_love = love.graphics.newImage("big_love_ball.png"), love = love.graphics.newImage("love_ball.png"), } -- Image / radius pairs. balldefs = { { i = images.green, r = 32 , ox = 36, oy = 36}, { i = images.big_love, r = 46 , ox = 48, oy = 48}, { i = images.love, r = 28 , ox = 32, oy = 32}, } -- Create the world. world = love.physics.newWorld(0, 300) -- Create ground body. ground = love.physics.newBody(world, 0, 0, "static") -- Add all the balls. addball(balldefs[1], 50) -- Add 100 green. addball(balldefs[2], 5) -- Add 5 big. addball(balldefs[3], 25) -- Add 50 pink. -- This generates the terrain. for i = 0, 10 do addbox(i*50, i*50+100) end end function love.update(dt) -- Update the world. world:update(dt) -- Check whether we need to reset some balls. -- When they move out of the screen, they -- respawn above the screen. for i,v in ipairs(balls) do local x, y = v.b:getPosition() if x > 850 or y > 650 then v.b:setPosition(math.random(600, 1400), -math.random(100, 1500)) v.b:setLinearVelocity(-math.random(100,1000), math.random(100,1000)) end end end function love.draw() -- Draw all the balls. for i, v in ipairs(balls) do love.graphics.draw(v.i, v.b:getX(), v.b:getY(), v.b:getAngle(), 1, 1, v.ox, v.oy) end -- Draw all the boxes. for i, v in ipairs(boxes) do love.graphics.polygon("line", v.s:getPoints()) end love.graphics.print("Click and drag the cake around or use the arrow keys", 10, 10) end -- Adds a static box. function addbox(x, y) local t = {} t.b = ground t.s = love.physics.newRectangleShape(x, y, 50, 50) t.f = love.physics.newFixture(t.b, t.s) table.insert(boxes, t) end -- Adds X balls. function addball(def, num) for i = 1, num do local x, y = math.random(0, 400), -math.random(100, 1500) local t = {} t.b = love.physics.newBody(world, x, y, "dynamic") t.s = love.physics.newCircleShape(def.r) t.f = love.physics.newFixture(t.b, t.s) t.i = def.i t.ox = def.ox t.oy = def.oy table.insert(balls, t) end end