#### Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

# Some problems with multiple objects

edited August 2014 Posts: 175

Hi guys , I want send big thanks to all of you who send me you solutions , suggestions in previous post. Now I have some troubles with making new project . I have a look to butterflies project, but without comments I don't understand much . So my problems : 1. Multiple floating flys (for example) 2. How make codea understand overlapping (I search here , but I want make collision without physics.body) 3. How delete sprite/rectangle/anything from the screen . My solution for this like

``````function touched(touch)
if touch.state == BEGAN then
ellipse(touch.x,touch.y,100,100)
else ellipse(-100,-100,100,100)
end
end
``````

But this don't work.

P.s All suggestions will make sense for me

Tagged:

• Posts: 791

Try this

``````--collision detection example based on circles
function setup()
--set up a table to hold the x y coordinates of the rocks
rocktable={}
for i=1,10 do
table.insert(rocktable,vec2(math.random(WIDTH),math.random(HEIGHT)))
end

end

function draw()
background(40, 40, 50)
--use a vector to store the x y coordinates of the ship
ship=vec2(CurrentTouch.x,CurrentTouch.y)
--drawthe ship
sprite("Space Art:Part Red Hull 3",ship.x,ship.y)
--loop through the rock table
for rocknumber,rock in pairs(rocktable) do
--draw the current rock
sprite("Space Art:Asteroid Small",rock.x,rock.y)
--if the distance between the centre ofthe current rock and the shipis less than 25 pixels then delete the current rock from the table
if ship:dist(rock)<25 then
table.remove(rocktable,rocknumber)
end

end
--print the number of rocks in the rock table
text(#rocktable,WIDTH/2,HEIGHT-100)
end

``````
• Posts: 175

@west thank you for this code , very useful for me

• Posts: 425

if you search "aabb" axis-aligned bounding box there is a library i wrote for rectangular collision detection.

• Posts: 175

@coder ooo , that's great. Thank you

• edited August 2014 Posts: 8,740

@lupino8211 Maybe this will help. Any fly that overlaps are removed. I don't have time to clean this up, but if you have questions I can answer them later.

``````displayMode(FULLSCREEN)

function setup()
count=0 -- set count
flys={} -- table for flys
-- create 30 flys
-- set random x,y position and set x,y speed to 0
for z=1,30 do
table.insert(flys,vec4(math.random(WIDTH),math.random(HEIGHT),0,0))
end
end

function draw()
background(40, 40, 50)
count=count-1   -- decrement count
if count<=0 then    -- if 0, set to 30
count=30    -- this is equivalent to 1/2 second
end
-- a=fly table position
-- b=fly information
-- b.x=fly x position  b.y=fly y position
-- b.z=fly x direction to move and distance
-- b.w=fly y direction to move and distance
for a,b in pairs(flys) do
b.x=b.x+b.z -- add speed direction to x position
b.y=b.y+b.w -- add speed direction to y position
if b.x>WIDTH then   -- check if off screen
b.x=0
end
if b.x<0 then
b.x=WIDTH
end
if b.y>HEIGHT then
b.y=0
end
if b.y<0 then
b.y=HEIGHT
end
-- draw fly at x and y position
sprite("Platformer Art:Battor Flap 1",b.x,b.y)
-- call function to check for overlap
checkOverlap(b.x,b.y,a) -- pass position of fly being drawn
if count==30 then   -- change direction every 1/2 second
b.z=math.random(-1,1)*3
b.w=math.random(-1,1)*3
end
end
-- remove flys that a flagged for removal
for z=#flys,1,-1 do
if flys[z].x==-5 then
table.remove(flys,z)
end
end
end

function checkOverlap(x,y,z)
v1=vec2(x,y)    -- x,y position of current fly
for w=1,#flys do    -- loop thru fly table
-- check for distance between flys
d=v1:dist(vec2(flys[w].x,flys[w].y))
if d<40 and z~=w then
flys[w].x=-5    -- set flys for removal
flys[z].x=-5
end
end
end

``````
• Posts: 175

@dave1707 oh, big thanks to you too. But what means that reductions? (b.x , d.x and so on)

• Posts: 8,740

@lupino8211 I changed the above code and added comments to explain what's happening.

• Posts: 175

@dave1707 thank you , kind sir. I start programming recently and comments very useful for me.