collsion dectection problem

hey everybody

i have a small but simple thing i cant seem to work, its about  a collision detection in my game. first of all i have created a display object called ground and enemy balloon. what i want is, when the enemy balloon touches or collides with the ground, i want the enemy balloon to be removed. can anyone help me do this? 

thanks, hazza

my code can be found below

-- -- Project: sticky balloons -- Description:&nbsp; -- -- Version: 1.0 -- Managed with http://CoronaProjectManager.com -- -- Copyright 2013 Harry Newton. All Rights Reserved. --&nbsp; display.setStatusBar(display.HiddenStatusBar) local physics = require "physics" physics.start();physics.setGravity(0,2.7) local ox, oy = math.abs(display.screenOriginX), math.abs(display.screenOriginY) local cw, ch = display.contentWidth, display.contentHeight local stage = display.getCurrentStage() physics.setDrawMode("hybrid") local &nbsp;foreGround = display.newGroup() local Balloons = display.newGroup() Balloons.isVisible = true --------------------------------------------------------------------- --FOREGROUND OBJECTS -------------------------------------------------------------------- local background = display.newImage(foreGround,"background.jpg") local ground = display.newImage(foreGround,"floor.png") physics.addBody(ground,"static") ground.y = 480 ground.type = "removeObject" local turret = display.newImageRect(foreGround,"BalloonTurret.png",134,134) turret.x = 160 turret.y = 420 local ox, oy = math.abs(display.screenOriginX), math.abs(display.screenOriginY) local cw, ch = display.contentWidth, display.contentHeight local wallL = display.newRect( -ox, -oy,1.5, ch+oy+oy ) wallL.isVisible = false physics.addBody(wallL, "static", { bounce=0.6, friction=1.0 } ) wallL.type = "notSticky" local wallR = display.newRect( cw-1.5+ox, -oy, 1.5, ch+oy+oy ) &nbsp;&nbsp; wallR.isVisible = false &nbsp; physics.addBody(wallR, "static", { bounce=0.6, friction=1.0 } ) wallR.type = "notSticky" ------------------------------------------------------------- ------------------------------------------------------------- local projFiring = false local proj local scaleFactor = 1.0 local physicsData = (require "Balloon").physicsData(1.0) local function newProj() &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;proj = display.newImage(Balloons,"Balloon.png"); proj.x = turret.x ; proj.y = turret.y - 20 &nbsp;&nbsp;&nbsp;&nbsp;physics.addBody( proj, "dynamic",physicsData:get("balloon") ) &nbsp;&nbsp;&nbsp;&nbsp;proj.gravityScale = -5 &nbsp;&nbsp;&nbsp;&nbsp;projFiring = false &nbsp;&nbsp;&nbsp;&nbsp;proj.isBullet = true &nbsp;&nbsp;&nbsp;&nbsp;proj.isBodyActive = false &nbsp;&nbsp;&nbsp;&nbsp;proj.isVisible = false &nbsp;&nbsp;&nbsp;&nbsp; end local enemyBalloon local function spawnEnemy() &nbsp;enemyBalloon = display.newImage(Balloons,"Balloon.png") physics.addBody(enemyBalloon,"dynamic", physicsData:get("balloon") ) enemyBalloon.x = math.random(0,320) enemyBalloon.y = -60 enemyBalloon:setFillColor( 214, 0, 19 ) enemyBalloon:applyTorque( 50 ) return enemyBalloon end local t --collision handler local function projCollide( self,event ) &nbsp;&nbsp;&nbsp;&nbsp;if ( event.phase == "began" ) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--get world coordinates of projectile for joint reference&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self:removeEventListener( "collision", self ) ; self.collision = nil &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--delay function to resolve collision &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local function resolveColl( timerRef ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( timerRef.source.action == "makeJoint" ) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local weldJoint = physics.newJoint( "weld", self, event.other, self.x, self.y ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--check if velocity of projectile is sufficient to "stick" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local vx,vy = self:getLinearVelocity() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local dirVel = math.sqrt( (vx\*vx)+(vy\*vy) ) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( dirVel \> 100 ) &nbsp; then &nbsp;--if sufficient, stop velocity and trigger joint creation &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self:setLinearVelocity( 0,0 ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = timer.performWithDelay( 10, resolveColl, 1 ) ; t.action = "makeJoint" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;--if not sufficient, "break" projectile and create new &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = timer.performWithDelay( 10, resolveColl, 1 ) ; t.action = "none" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (event.other.type == "notSticky") &nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--local t = timer.performWithDelay(2,resolveColl,1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.action = "none" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;end end local function touchAction(event) &nbsp;&nbsp;&nbsp;&nbsp;if ( event.phase == "began" and projFiring == false ) then &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projFiring = true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj.isBodyActive = true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj.isVisible = true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local px,py = event.x-proj.x, event.y-proj.y &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj:applyLinearImpulse( px/8, py/8, proj.x, proj.y ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj:applyTorque( 50 ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj.gravityScale = -5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proj.collision = projCollide ; &nbsp; proj:addEventListener( "collision", proj ) &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if (projFiring == true) then &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newProj() &nbsp;&nbsp;&nbsp;&nbsp;end end newProj() stage:addEventListener( "touch", touchAction ) local spawnTmr local spawnTime = 5000 local difficultyLevels = 4 --local spawnTimer = timer.performWithDelay(5000,spawnEnemy, 0 )---- THIS IS AN &nbsp;INFINITE LOOP HARRY ,U MUST YOU'SE THIS A LOT local function increaseDifficulty() &nbsp; &nbsp; &nbsp; &nbsp; if spawnTmr ~= nil then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timer.cancel(spawnTmr) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spawnTmr = nil &nbsp; &nbsp; &nbsp; &nbsp; end &nbsp; &nbsp; &nbsp; &nbsp;spawnTime = spawnTime - 500 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- just to be safe, set this to whatever spawn rate would be the &nbsp; &nbsp; &nbsp; &nbsp;-- fastest, so game never spawns to fast &nbsp; &nbsp; &nbsp; &nbsp;if spawnTime \< 500 then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;spawnTime = 500 &nbsp; &nbsp; &nbsp; &nbsp;end &nbsp; &nbsp; &nbsp; &nbsp;-- spawn at this rate until this timer is canceled&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;spawnTmr = &nbsp;timer.performWithDelay(spawnTime, spawnEnemy, 0) &nbsp; &nbsp; end &nbsp; &nbsp; -- this timer loops only till spawning at most difficult speed is reached &nbsp; &nbsp; local difficultyTmr = &nbsp;timer.performWithDelay(5000, increaseDifficulty,difficultyLevels ) &nbsp;

Hello,

It appears that you’ve borrowed code from a demo (“sticky projectiles”?) that is more complex than your described intention. Have you referred to the basic collision guide on how to implement collisions? Explore “local collisions” and, once you have that working, remove the balloons in the “began” collision phase with the ground.

http://docs.coronalabs.com/guide/physics/collisionDetection/index.html

Best regards,

Brent

thanks i understand now :slight_smile:

Hello,

It appears that you’ve borrowed code from a demo (“sticky projectiles”?) that is more complex than your described intention. Have you referred to the basic collision guide on how to implement collisions? Explore “local collisions” and, once you have that working, remove the balloons in the “began” collision phase with the ground.

http://docs.coronalabs.com/guide/physics/collisionDetection/index.html

Best regards,

Brent

thanks i understand now :slight_smile: