# Collision

Hi, sorry for a question that seems to me like it should be pretty simple but I cannot understand collisions. I am new to this an do would really appreciate it if someone were to help me out by telling me how to use them. Also can you provide examples? Thanks in advance

Here is a simple program showing a collision and how to get some info when a collision happens.

``````
function setup()
c1 = physics.body(CIRCLE,100)    -- create stationary circle
c1.type=STATIC
c1.x=WIDTH/2
c1.y=300

c2 = physics.body(CIRCLE,50)    -- create falling circle
c2.x=WIDTH/2
c2.y=800
c2.restitution=1
end

function draw()
background(40,40,50)
stroke(255)
strokeWidth(1)
noFill()
ellipse(c1.x,c1.y,200,200)    -- draw the stationary circle
ellipse(c2.x,c2.y,100,100)    -- draw the falling circle
end

function collide(c)  -- this gets called when a collision occurs
if c.state==BEGAN then
print("\
collision")
-- see physics.contact and physics.body in the reference manual
-- for other info that's available during a collision
end
end

``````

Thank you so much. This was so helpful

whats wrong with my code i want it to be able to make the sprites not overlapp

â€“ gravity with walls

â€“ Use this function to perform your initial setup
function setup()
print(â€śrugby rulesâ€ť)
x = WIDTH/2
y = HEIGHT/2
xx = WIDTH/2
yy = HEIGHT/2

``````sound("Game Sounds One:1-2-3 Go")
``````

end
function draw()
â€“ This sets a dark background color
sprite(â€śDocuments:feildâ€ť,WIDTH/2, HEIGHT/2, WIDTH, HEIGHT)

``````-- This sets the line thickness
strokeWidth(5)

sprite("Documents:ball",x, y, 50)
x = (x + Gravity.x * 23)
y = (y + Gravity.y * 23)

xx = (xx + Gravity.xx * 20)
yy = (yy + Gravity.yy * 20)

if x < 25 then
x = 25
elseif x > WIDTH - 25 then
x = WIDTH - 25
end

if y < 25 then
y = 25
elseif y > HEIGHT - 25 then
y = HEIGHT - 25
end

if xx < 20 then
xx = 20
elseif xx > WIDTH - 20 then
xx = WIDTH - 20
end

if yy < 20 then
yy = 20
elseif yy > HEIGHT - 20 then
yy = HEIGHT - 20
end
``````

end

function isNotlapping()
local re1=x+20
local le1=x-20
local te1=y+20
local be1=y-20
local re2=xx+20
local le2=xx-20
local te2=yy+20
local be2=yy-20
if s2.re > s1.le or
s2.le > s1.re or
s2.be > s1.te or
s2.te < s1.be then
return false
end
end
function isOverlapping()
local re1=x+20
local le1=x-20
local te1=y+20
local be1 =y-20
local re2=xx+20
local le2=xx-20
local te2=yy+20
local be2=yy-20
if s2.re < s1.le or
s2.le < s1.re or
s2.be < s1.te or
s2.te > s1.be then
return true
end
end

``````-- gravity with walls

-- Use this function to perform your initial setup
function setup()
print("rugby rules")
x = WIDTH/2
y = HEIGHT/2
xx = WIDTH/2
yy = HEIGHT/2

sound("Game Sounds One:1-2-3 Go")
end
function draw()
-- This sets a dark background color
sprite("Documents:feild",WIDTH/2, HEIGHT/2, WIDTH, HEIGHT)

-- This sets the line thickness
strokeWidth(5)

sprite("Documents:ball",x, y, 50)
x = (x + Gravity.x * 23)
y = (y + Gravity.y * 23)

xx = (xx + Gravity.xx * 20)
yy = (yy + Gravity.yy * 20)

if x < 25 then
x = 25
elseif x > WIDTH - 25 then
x = WIDTH - 25
end

if y < 25 then
y = 25
elseif y > HEIGHT - 25 then
y = HEIGHT - 25
end

if xx < 20 then
xx = 20
elseif xx > WIDTH - 20 then
xx = WIDTH - 20
end

if yy < 20 then
yy = 20
elseif yy > HEIGHT - 20 then
yy = HEIGHT - 20
end
end

function isNotlapping()
local re1=x+20
local le1=x-20
local te1=y+20
local be1=y-20
local re2=xx+20
local le2=xx-20
local te2=yy+20
local be2=yy-20
if s2.re > s1.le or
s2.le > s1.re or
s2.be > s1.te or
s2.te < s1.be then
return false
end
end
function isOverlapping()
local re1=x+20
local le1=x-20
local te1=y+20
local be1 =y-20
local re2=xx+20
local le2=xx-20
local te2=yy+20
local be2=yy-20
if s2.re < s1.le or
s2.le < s1.re or
s2.be < s1.te or
s2.te > s1.be then
return true
end
end

``````

my code got messted up

Also - put three ~ on the line before your code, and another three ~ on the line after your code, to format it nicely (you can edit your posts above to do this), otherwise nobody s going to be able to read your code at all

added the 3 ~'s before and after the code

@minersack27 Hereâ€™s your code changed a little. I donâ€™t have the sprites you used so I picked some thatâ€™s in Codea. The girl sprite can overlap the boy sprite, but the boy sprite canâ€™t overlap the girl sprite. A better way to do this is to use physics objects and let the physics code handle collisions.

``````
-- gravity with walls

function setup()
print("rugby rules")
x = WIDTH/2
y = HEIGHT/2
xx = WIDTH/2-50
yy = HEIGHT/2-50
sound("Game Sounds One:1-2-3 Go")
end
function draw()
background(0)
sprite("Planet Cute:Grass Block",WIDTH/2, HEIGHT/2, WIDTH, HEIGHT)
sprite("Planet Cute:Character Boy",x, y, 50)
if not Overlapping() then
x = (x + Gravity.x * 23)
y = (y + Gravity.y * 23)
end
sprite("Planet Cute:Character Pink Girl",xx, yy, 50)
xx = (xx + Gravity.xx * 20)
yy = (yy + Gravity.yy * 20)
if x < 25 then
x = 25
elseif x > WIDTH - 25 then
x = WIDTH - 25
end
if y < 25 then
y = 25
elseif y > HEIGHT - 25 then
y = HEIGHT - 25
end
if xx < 20 then
xx = 20
elseif xx > WIDTH - 20 then
xx = WIDTH - 20
end
if yy < 20 then
yy = 20
elseif yy > HEIGHT - 20 then
yy = HEIGHT - 20
end
end

function Overlapping()
if math.abs(x-xx)<50 and math.abs(y-yy)<50 then
return true
else
return false
end
end

``````

@minersack27 Hereâ€™s code using physics objects. Itâ€™s a lot easier to let the physics engine do the collision detection. To move the characters, slide your finger around the screen starting on their side of the field. Each character can be moved on their own.

``````
supportedOrientations(PORTRAIT_ANY)
displayMode(FULLSCREEN)

function setup()
sound("Game Sounds One:1-2-3 Go")
rectMode(CENTER)
physics.continuous=true
c=physics.body(CHAIN,false,vec2(0,0),vec2(0,HEIGHT),
vec2(WIDTH,HEIGHT),vec2(WIDTH,0),vec2(0,0))
p1=physics.body(CIRCLE,20)
p1.x=WIDTH/2
p1.y=HEIGHT-100
p1.gravityScale=0

p2=physics.body(CIRCLE,20)
p2.x=WIDTH/2-50
p2.y=100
p2.gravityScale=0

b1=physics.body(CIRCLE,20)
b1.x=WIDTH/2
b1.y=HEIGHT/2
b1.gravityScale=0
b1.restitution=1.1

g1x,g1y=0,0
g2x,g2y=0,0
end
function draw()
background(0, 255, 24, 255)
strokeWidth(3)
line(0,HEIGHT/2,WIDTH,HEIGHT/2)
noFill()
ellipse(WIDTH/2,HEIGHT/2,200)
rect(WIDTH/2,HEIGHT,200,100)
rect(WIDTH/2,0,200,100)
fill(255)
ellipse(b1.x,b1.y,40)
sprite("Planet Cute:Character Boy",p1.x, p1.y, 50)
sprite("Planet Cute:Character Pink Girl",p2.x,p2.y, 50)
p1.linearVelocity=vec2(g1x,g1y)
p2.linearVelocity=vec2(g2x,g2y)
end

function touched(t)
if t.y>HEIGHT/2 then
g1x=g1x+t.deltaX*5
g1y=g1y+t.deltaY*5
else
g2x=g2x+t.deltaX*5
g2y=g2y+t.deltaY*5
end
end

``````