Code:
--# Main
-- FX
displayMode(FULLSCREEN)
function setup()
supportedOrientations(LANDSCAPE_LEFT)
iparameter("balls",2,100,200)
iparameter("number",1,100,200)
tab1={} -- table for objects
radius=WIDTH/(balls*3) -- starting radius
prevBalls=0
prevNumber=0
getOffset()
create()
end
function draw()
background(0, 0, 0, 255)
smooth()
-- balls or number were changed with iparameters
if prevBalls ~= balls or prevNumber ~= number then
create()
end
for z=1,balls do
ball=tab1[z].bodyA
--ball shine
fill(255, 255, 255, 42)
ellipse(ball.x,ball.y,ball.radius*3)
ellipse(ball.x,ball.y,ball.radius*2)
ellipse(ball.x,ball.y,ball.radius*1.5)
fill(255, 255, 255, 170)
ellipse(ball.x,ball.y,ball.radius*1)
end
end
function create()
if prevBalls ~= balls or prevNumber ~= number then
for z=1,prevBalls do
tab1[z].bodyA:destroy()
tab1[z]:destroy()
tab1[z]=nil
end
if number > balls-1 then
number = balls-1
end
prevBalls=balls
prevNumber=number
radius=WIDTH/(balls*3)
getOffset()
end
for z=1,balls do
hanger=physics.body(CIRCLE,0)
hanger.type=STATIC
hanger.x=z*r2+offset
hanger.y=1000
ball=physics.body(CIRCLE,10)
ball.restitution=0
ball.x=z*r2+offset
ball.y= math.random(1000)
if z<=number then
ball.linearVelocity=vec2(math.random(100),math.random(100))
end
tab1[z]=physics.joint(REVOLUTE,ball,hanger,hanger.position)
end
end
function getOffset()
r2=radius*2+2
c=r2*balls-r2
offset=((WIDTH-c)/2)-r2
end