The problem is in the function name "bullet Collision) I cannot remove the bullet after collision. If the line self:removeSelf() is removed then the code runs. The error shows just after the bullet collide with the enemy.
–Physics world creation
local physics = require (“physics”)
physics.start()
physics.setGravity(1,1)
–screen
local width=display.contentWidth
local height=display.contentHeight
–game characters
local enemy
local hero
local bullet
local background
local score
local counter
–backGround
background= display.newImage(“night_sky.png”,width/2,height/2,true)
–collision filters
local heroCollisionFilter = { categoryBits=1, maskBits=2 }
local enemyCollisionFilter = { categoryBits=2, maskBits=7 }
local bulletCollisionFilter = { categoryBits=4, maskBits=2 }
–hero’s death
function heroCollision(event)
end
–bullet heat
function bulletCollision(event, self)
print(“bullet collided”)
if event.other.name == “enemy” then
self:removeSelf()
event.other:removeSelf()
event.other= nil
end
end
–fire
function fireBullet(event)
bullet=display.newImage(“bullet.png”,hero.x,hero.y )
physics.addBody(bullet,{filter=bulletCollisionFilter})
bullet.name=bullet
local gx = event.x-bullet.x
local gy = event.y-bullet.y
physics.setGravity(gx/10,gy/10)
bullet.collision= bulletCollision
bullet:addEventListener(“collision”, bulletCollision)
end
function addEnemy()
local enemy = display.newImage(“ball.png”,40,50)
physics.addBody(enemy,{filter=enemyCollisionFilter})
enemy.gravityScale=0
enemy:addEventListener(“tap”,fireBullet)
enemy.name= “enemy”
end
addEnemy()
background:addEventListener(“tap”, fireBullet)
hero = display.newImage(“pearl1.png”,width/2,height/2,true)