kevin ver
kevin ver

Reputation: 851

Collision not working on the ceiling

All the collisions are working except the "ceiling" what am I missing here?

local screenGroup = self.view

jetSpriteSheet = sprite.newSpriteSheet("helicopters.png", 97, 55) 
jetSprites = sprite.newSpriteSet(jetSpriteSheet, 1, 4)
sprite.add(jetSprites, "jets", 1, 8, 600, 0)
jet = sprite.newSprite(jetSprites)
jet.x = -80
jet.y = 350
jet:prepare("jets")
jet:play()
jet.collided = false
jet.name = "jetplayer"

physics.addBody(jet, "dynamic", {density=.1, bounce=0.1, friction=.2, radius=10, filter=playerCollisionFilter } )   
jet.gravityScale = 0

jetIntro = transition.to(jet,{time=2000, x=150, onComplete=jetReady})
screenGroup:insert(jet)

ceiling = display.newImage("invisibleTile.png")
ceiling.name = "ceiling"
ceiling:setReferencePoint(display.BottomLeftReferencePoint)
ceiling.x = 0
ceiling.y = 0

physics.addBody(ceiling, "static", {density=.1, bounce=0.1, friction=.2,} )  
screenGroup:insert(ceiling)

local function onCollision(event)
    if event.phase == "began" and gameIsActive == true then
    local obj1 = event.object1; 
    local obj2 = event.object2; 
        if obj1.name == "jetplayer" then
            if     obj2.name == "BCloud1" then MinLife()
            elseif obj2.name == "BCloud2" then pontsMin10()
            elseif obj2.name == "BCloud3" then pontsMin20()
            elseif obj2.name == "GCloud1" then pontsplus50()
            elseif obj2.name == "ceiling" then explode()
            elseif obj2.name == "theFloor" then explode()
            end
        end
    end
end
Runtime:addEventListener( "collision", onCollision )

Upvotes: 0

Views: 103

Answers (1)

Krishna Raj Salim
Krishna Raj Salim

Reputation: 7390

Just replace the following line:

physics.addBody(app, "dynamic", {density=.1, bounce=0.1, friction=.2, radius=10, filter=playerCollisionFilter } )

as below, and check again:

physics.addBody(app, "dynamic", {density=.1, bounce=0.1, friction=.2,filter=playerCollisionFilter } )

I am not fully aware of this behavior of corona. Here the object with radius (jetplayer) is choosen as obj2. So, either you may remove the radius, if not needed, or change the function as:

if(obj1.name == "jetplayer" or obj2.name == "jetplayer")then
    if(obj1.name == "ceiling" or obj2.name == "ceiling")then
        explode()
    end
end

Keep coding..........:)

Upvotes: 1

Related Questions