I am having a strange issue with Corona SDK. I have an egg style catching game where you collect items and avoid certain objects. The player is moved left and right with an accelerometer and objects fall from the sky. The game runs well, except for a major flaw: when the dangerous objects hit the initial player’s location (where the player is spawned - x = 160, y = display.contentHeight - 40), collision is detected among the player and the object. As a result there is a ghost effect happening when objects drop to x = 160 (+ or - the width of the player / 2).
The player object:
local createChar = function() charObject = display.newImageRect( "charSprite.png", y/9, y/9 ) physics.addBody( charObject, "static", { density=1.0, bounce=0.4, friction=0.15, radius=20, shape=basketShape} ) charObject.x = -100; charObject.y = y - ground.contentHeight - y/22 charObject.rotation = 0 charObject.isHit = false charObject.myName = "character" fishDead = display.newImageRect( "fishdead.png", y/20, y/20 ) fishDead.alpha = 1.0 fishDead.isVisible = false gameGroup:insert( charObject ) end
The dangerous sea lion object is created through a timer (every 3 seconds). This is the code for each time interval
local sealionDrop = function() if gameIsActive == true then local sealion = display.newImageRect( "sealion.png", y / 11, y / 11 ) sealion.x = 40 + mRand( x - 55 ); sealion.y = -100 sealion.isHit = false physics.addBody( sealion, "dynamic",{ density=20, bounce=0, friction=1, shape=sealionShape } ) sealion.isFixedRotation = true gameGroup:insert( sealion ) sealion.gravityScale = sealionSpeed sealion.postCollision = onLionCollision sealion:addEventListener( "postCollision", sealion ) end
Here is my collision code between the player and the dangerous “sealion” object:
local onLionCollision = function( self, event ) if event.other.myName == "character" and charObject.x == self.x then hit = timer.performWithDelay( 1, characterHit, 2 ) livesCount() self.isHit = true self.parent:remove( self ) self = nil elseif event.other.myName == "ground" then print("ground hit") self.isHit = true self.parent:remove( self ) self = nil end if gameLives \< 1 then timer.cancel( startLionDrop ) print("timer cancelled") end end
If someone could help figure out this weird ghost effect, that would be amazing. Thank you!