Hi,
Ive been trying to solve the issue that I stated in the title. The exact error in corona is
main.lua 136: attempts to call method ‘removeSelf’(a nil value) stack traceback
main.lua136:in function ‘_listener’
?: in function <?167>
?:in function <?169>
Any help would be great thanks.
function startGame(tapHandlerFn) splashScreen.isVisible = false sound1.isVisible = false sound2.isVisible = false level1.isVisible = true dpad.dSwitch(true) end local bg = display.newImageRect( level1, "assets/background.png", W\*4, H) bg.x = W/2 bg.y = H/2 - 50 bg:scale(1.2,1.2) local bg = display.newImageRect( level1, "assets/background.png", W\*4, H) bg.x = W/2 - 1450 bg.y = H/2 - 50 bg:scale(1.2,1.2) local bg = display.newImageRect( level1, "assets/background.png", W\*4, H) bg.x = W/2 + 1450 bg.y = H/2 - 50 bg:scale(1.2,1.2) local floor = display.newRect(level1, W/2, H, W\*100, 20) floor:setFillColor( 0, 0, 0 ) physics.addBody( floor, "static", {density=1.0, friction=0.02, bounce=0.2} ) local zombie = require("zombie") zombieShape = {-50,-90, 50,-90, 40, 95, -40,95} physics.addBody( zombie, {density=5.0, friction=.05, bounce=0.2, shape=zombieShape} ) zombie.x = W/2 + 50 zombie.y = H/2 + 140 zombie:scale(.5,.5) zombie.type = "zom" level1:insert(zombie) local player = require("player") playerShape = {-75,-75, 75,-75, -50, 90, 50, 90} physics.addBody( player, {density=1.0, friction = 0.02, bounce=0.2, shape=playerShape} ) player.x = W/2 - 300 player.y = H/2 + 100 player:scale(.4,.4) level1:insert(player) local gun = display.newImageRect( level1, "assets/ak-47.png", 150, 50) local function keyHandler(event) if(event.keyName == "space") then if(event.phase == "down") then shoot() else end end end function shoot() local function collided(event) local function listener(event) zombie:removeSelf() end if(event.other.type=="zom") then zombie:setSequence("dead") zombie:play() timer.performWithDelay( 1000, listener ) else end end local new\_bullet = display.newCircle( level1, gun.x + 80, gun.y - 17, 5 ) local function move\_bullet() new\_bullet.x = new\_bullet.x + 30 if(new\_bullet.y \< 0) then new\_bullet:removeSelf( ) else timer.performWithDelay( 30, move\_bullet , 1 ) end end physics.addBody( new\_bullet, "dynamic" ) new\_bullet.isSensor = true new\_bullet.gravityScale = 0 new\_bullet:addEventListener("collision", collided) timer.performWithDelay( 33, move\_bullet , 1 ) end function onRedraw(event) player.rotation = 0 local vx, vy = player:getLinearVelocity() local onGround = (vy \< 2) and (vy \> -2) player:applyForce( (dpad.x\_touch \* 50), 0, player.x, player.y ) if(dpad.x\_touch \> 0) then player.xScale = .4 gun.xScale = 1 elseif(dpad.x\_touch \< 0) then player.xScale = -.4 gun.xScale = -1 end if (onGround) then if((vx \> 2) or (vx \< -2)) then if(player.sequence~="walk") then player:setSequence("walk") player:play() end else if(player.sequence~="idle") then player:setSequence("idle") player:play() end end elseif(vy \> 10) then --falling player:setSequence("idle") player:play() else -- player is moving up -- do nothing because jump took care of it? end if (dpad.a\_touched) then -- jump button pressed if(onGround) then player:applyForce( 0, -5000, player.x, player.y ) if(player.sequence~="jump") then player:setSequence("jump") player:play() end end end local apparent\_x = player.x + level1.x if(apparent\_x \> RIGHT\_BOUND) then level1.x = level1.x - (apparent\_x - RIGHT\_BOUND) elseif(apparent\_x \< LEFT\_BOUND) then level1.x = level1.x + (LEFT\_BOUND - apparent\_x) end gun.x = player.x gun.y = player.y + 50 end Runtime:addEventListener( "enterFrame", onRedraw ) Runtime:addEventListener( "key", keyHandler ) start:addEventListener( "tap", startGame ) dpad.toFront()