Spawn enemy

I have two problems first is how to spawn enemy when my score is 1 . Second is how to keep a distance between the bullets .

This is my code

local physics = require("physics") physics.start() physics.setGravity(0, 0) score = 0; scoreDisplay = display.newText("Score: "..score,0,0,native.systemFont,16) scoreDisplay.x, scoreDisplay.y = 50 ,100 player = display.newRect(160,300,50,50) physics.addBody(player, "dynamic") function moveEnemy(obj) if obj.y \< 250 then obj.y = obj.y +1 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function moveBullet(obj) if obj.y \> 50 then obj.y = obj.y - 5 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function spawnBullet() bullet = display.newCircle(0,0,5) bullet.x=player.x bullet.y = player.y + 20 bullet.name = "bullet" physics.addBody(bullet,{isSensor = true } ) bullet.enterFrame = moveBullet Runtime:addEventListener("enterFrame",bullet) end function shoot(e) if e.phase == "began" then spawnBullet() shootTime = timer.performWithDelay(500,spawnBullet,0) elseif e.phase == "ended" then timer.cancel(shootTime) end end Runtime:addEventListener("touch", shoot) function onCollision( event ) if(event.object1.name == "bullet" and event.object2.name == "enemy") then display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) score = score + 1 scoreDisplay.text= "Score: "..score elseif(event.object1.name == "enemy" and event.object2.name == "bullet") then display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) score = score + 1 scoreDisplay.text= "Score: "..score end end function enemySpawn() enemy = display.newRect(160,0,50,50) enemy.name = "enemy" physics.addBody(enemy, {isSensor = true } ) enemy.enterFrame = moveEnemy Runtime:addEventListener("enterFrame",enemy) end function enemySpawn2() if score \> 0 then timer.performWithDelay(1000,enemySpawn,0) end end enemySpawn() enemySpawn2() Runtime:addEventListener("collision",onCollision)

Here is my take on it.  Basically I’ve set a variable to determine a Reload Time for the gun and I’m spawning a new enemy if an enemy gets hit.  I recommend you look into scope as you seem to be using a high number of global variables (although that may just be this code you are showing us).

local physics = require("physics") physics.start() physics.setGravity(0, 0) score = 0; scoreDisplay = display.newText("Score: "..score,0,0,native.systemFont,16) scoreDisplay.x, scoreDisplay.y = 50 ,100 local reloadTime = 200 --milliseconds local lastShotFired = system.getTimer() player = display.newRect(160,300,50,50) physics.addBody(player, "dynamic") function moveEnemy(obj) if obj.y \< 250 then obj.y = obj.y +1 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function moveBullet(obj) if obj.y \> 50 then obj.y = obj.y - 5 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function spawnBullet() bullet = display.newCircle(0,0,5) bullet.x=player.x bullet.y = player.y + 20 bullet.name = "bullet" physics.addBody(bullet,{isSensor = true } ) bullet.enterFrame = moveBullet Runtime:addEventListener("enterFrame",bullet) end function shoot(e) if e.phase == "began" then local now = system.getTimer() if now-lastShotFired\>reloadTime then spawnBullet() lastShotFired = system.getTimer() end elseif e.phase == "ended" then end end Runtime:addEventListener("touch", shoot) function onCollision( event ) if(event.object1.name == "bullet" and event.object2.name == "enemy") then display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) score = score + 1 enemySpawn2() scoreDisplay.text= "Score: "..score elseif(event.object1.name == "enemy" and event.object2.name == "bullet") then display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) score = score + 1 enemySpawn2() scoreDisplay.text= "Score: "..score end end function enemySpawn() enemy = display.newRect(160,0,50,50) enemy.name = "enemy" physics.addBody(enemy, {isSensor = true } ) enemy.enterFrame = moveEnemy Runtime:addEventListener("enterFrame",enemy) end function enemySpawn2() if score \> 0 then timer.performWithDelay(1000,enemySpawn,1) end end enemySpawn() Runtime:addEventListener("collision",onCollision)

Here is my take on it.  Basically I’ve set a variable to determine a Reload Time for the gun and I’m spawning a new enemy if an enemy gets hit.  I recommend you look into scope as you seem to be using a high number of global variables (although that may just be this code you are showing us).

local physics = require("physics") physics.start() physics.setGravity(0, 0) score = 0; scoreDisplay = display.newText("Score: "..score,0,0,native.systemFont,16) scoreDisplay.x, scoreDisplay.y = 50 ,100 local reloadTime = 200 --milliseconds local lastShotFired = system.getTimer() player = display.newRect(160,300,50,50) physics.addBody(player, "dynamic") function moveEnemy(obj) if obj.y \< 250 then obj.y = obj.y +1 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function moveBullet(obj) if obj.y \> 50 then obj.y = obj.y - 5 else obj:removeSelf() Runtime:removeEventListener("enterFrame",obj) end end function spawnBullet() bullet = display.newCircle(0,0,5) bullet.x=player.x bullet.y = player.y + 20 bullet.name = "bullet" physics.addBody(bullet,{isSensor = true } ) bullet.enterFrame = moveBullet Runtime:addEventListener("enterFrame",bullet) end function shoot(e) if e.phase == "began" then local now = system.getTimer() if now-lastShotFired\>reloadTime then spawnBullet() lastShotFired = system.getTimer() end elseif e.phase == "ended" then end end Runtime:addEventListener("touch", shoot) function onCollision( event ) if(event.object1.name == "bullet" and event.object2.name == "enemy") then display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) score = score + 1 enemySpawn2() scoreDisplay.text= "Score: "..score elseif(event.object1.name == "enemy" and event.object2.name == "bullet") then display.remove(event.object1) Runtime:removeEventListener("enterFrame",event.object1) display.remove(event.object2) Runtime:removeEventListener("enterFrame",event.object2) score = score + 1 enemySpawn2() scoreDisplay.text= "Score: "..score end end function enemySpawn() enemy = display.newRect(160,0,50,50) enemy.name = "enemy" physics.addBody(enemy, {isSensor = true } ) enemy.enterFrame = moveEnemy Runtime:addEventListener("enterFrame",enemy) end function enemySpawn2() if score \> 0 then timer.performWithDelay(1000,enemySpawn,1) end end enemySpawn() Runtime:addEventListener("collision",onCollision)