Howdy, Stranger!

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

Collision

edited November 2012 in Questions Posts: 2

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 :)

Tagged:

Comments

  • dave1707dave1707 Mod
    edited November 2012 Posts: 6,993

    Hi @Deretsuk

    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("\ncollision")         print("radius of body A ",c.bodyA.radius)         print("radius of body B ",c.bodyB.radius)         -- 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)
    
    -- Do your drawing here
    sprite("Documents:ball",x, y, 50)
    x = (x + Gravity.x * 23)
    y = (y + Gravity.y * 23)
    
    sprite("Documents:loose head prop",xx, yy, 40)
    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

  • edited November 2014 Posts: 4
    -- 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)
    
        -- Do your drawing here
        sprite("Documents:ball",x, y, 50)
        x = (x + Gravity.x * 23)
        y = (y + Gravity.y * 23)
    
        sprite("Documents:loose head prop",xx, yy, 40)
        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

  • IgnatzIgnatz Mod
    Posts: 5,396

    @minersack27 - please don't post comments in threads that are two years old, which have nothing to do with your problem. Start a new thread.

    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

  • dave1707dave1707 Mod
    Posts: 6,993

    added the 3 ~'s before and after the code

  • dave1707dave1707 Mod
    Posts: 6,993

    @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
  • dave1707dave1707 Mod
    Posts: 6,993

    @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
Sign In or Register to comment.