alestane icon

Single-listener collision

alestane | PRO | 03/15/13 09:18:33 PM UTC | 0 ⭐ | 343 👁️ | Never ⏰ | []
Lua |

2.95 KB

|

None

|

0 👍

/

0 👎

function createPara(copter)
    local randX = math.random(100, 200)
    if copter.x ~= nil then
        if tonumber(copter.x) > 50 and tonumber(copter.x) < 470 then
            if copter.isAlive then
                local paraChuter = display.newSprite( getSheet( obj.paraChuter.paraGlide), getSequenceData.paraData )
                paraChuter.x = copter.x-10
                paraChuter.y = copter.y+5
                paraChuter:play()
                paraChuter.name = "paraChuter"
                physics.addBody(paraChuter, "dynamic", physicsData:get("paraglider"))
                paraChuter.isFixedRotation = true
                paraChuter.linearDamping = 5
            end
        end                            
    end
end
 
local function onLocalPreCollision( event )
    if not event.target.Skipped or event.target.Skipped == event.other then
            event.contact.isEnabled = false
        event.target.Skipped = event.other
    end
end
 
function onCollision(self, event)
    
    ---- if bullet hits parachuter
    if event.phase == "began" and (self.name == "bullet" and event.other.name == "paraChuter") then
        
        event.other:setSequence( "paraGlideHs" )
        event.other.name = "paraGlideHs"
 
        event.other:addEventListener( "preCollision", onLocalPreCollision )
 
        event.other.isFixedRotation = true
        event.other.linearDamping = 5
        
        event.other:play()
        
        display.remove(self)
        self = nil
     end
end
 
function setUpCatchPlatform()
 
    local platform = display.newRect( 0, 0, display.contentWidth * 4, 0)
    platform.myName = "platform1"
    platform.x =  (display.contentWidth / 2)
    platform.y = (display.contentHeight / 2) + 40
    physics.addBody(platform, "static", collisionTable.firstParaPlatformProp)
 
    platform.collision = onCatchPlatformCollision
    platform:addEventListener( "collision", platform )
end
 
function setUpCatchPlatform2()
    local platform2 = display.newRect( 0, 0, display.contentWidth * 4, 0)
    platform2.myName = "platform2"
    platform2.x =  (display.contentWidth / 2)
    platform2.y = (display.contentHeight / 2) + 150
    physics.addBody(platform2, "static", collisionTable.secondParaPlatformProp)
 
    platform2.collision = onCatchPlatformCollision2
    platform2:addEventListener( "collision", platform2 )
end
 
function onCatchPlatformCollision(self, event)
    if event.phase == "began" and event.other.name == "paraChuter" then
        
        if event.other ~= nil then
            event.other:setSequence( "paraLand" )
            event.other.name = "paraLander"
            
            local doCollision = function()
                physics.removeBody(event.other)
                physics.addBody(event.other, "dynamic", physicsData:get("paralander"))
                event.other:play()
            end
            local collisionTimer = timer.performWithDelay( 1, doCollision, 1 )
        end
    
    end
end

Comments