When I tap on attack button attackHitbox appears. If attackHitbox collides with zombie for some reason value hero.hp is going down… How to fix it?
Hero.hp value do only go down when hero collides with zombie.
[lua]
local composer = require “composer”
local joystickPlugin = require “plugin.joystick”
local physics = require “physics”
local scene = composer.newScene();
function scene:create(event)
physics.start()
physics.setGravity(0,0)
local sceneGroup = self.view;
system.activate(“multitouch”)
local spaceBackground = display.newImageRect(“Images/SpaceBackground.png”,
display.actualContentWidth, display.actualContentHeight)
spaceBackground.x = display.contentCenterX
spaceBackground.y = display.contentCenterY
local loading = display.newText(“Loading…”, display.contentCenterX - 230, 330,
“Lobster-Regular”, 40)
local map = display.newImage(“Images/survivalModeMap.png”)
map.isVisible = false
map.x = display.contentCenterX
map.y = display.contentCenterY
local hero = display.newImage(“Images/mehaHat.png”)
hero.isVisible = false
hero.x = display.contentCenterX
hero.y = display.contentCenterY
physics.addBody(hero,“static”)
hero.direction = “up”
hero.hp = 100
local hp = display.newText("Hp: "…hero.hp,display.contentCenterX,300,
“Lobster-Regular”, 50)
local zombie = display.newImage(“Images/zombie.jpg”)
zombie.isVisible = false
zombie.x = display.contentCenterX
physics.addBody(zombie,“dynamic”)
zombie.y = -100
zombie.hp = 10
zombie.phase = “ended”
function zombieCollision(self, event)
if event.phase == “began” then
zombie.phase = “touching”
timer.performWithDelay( 1, function()
local function damage()
if zombie.phase == “touching” then
if hero.hp > 0 then
hero.hp = hero.hp - 10
hp.text = "Hp: "…hero.hp
end
end
end
timer.performWithDelay(1000,damage,-1)
end)
elseif event.phase == “ended” then
zombie.phase = “ended”
end
end
zombie.collision = zombieCollision
local AttackButton = display.newImage(“Images/mehaAttackButton.png”)
AttackButton.isVisible = false
AttackButton.x = 480
AttackButton.y = 270
local AttackAnimationSheetData = {
width = 400,
height = 400,
numFrames = 10,
sheetContentWidth = 800,
sheetContentHeight = 2000
}
local AttackAnimationSheet = graphics.newImageSheet(“Images/mehaAttackAnimation.png”, AttackAnimationSheetData)
local sequenceData = {
{ name = “Attack”, start = 1, count = 10, time = 500, loopCount = 1}
}
local props = {
x = 10,
y = 270,
backgroundRadius = 50,
movedStickRadius = 25,
}
function loadingEnd()
spaceBackground.isVisible = false
loading.isVisible = false
map.isVisible = true
hero.isVisible = true
zombie.isVisible = true
AttackButton.isVisible = true
end
local Joystick = joystickPlugin.newJoystick(props)
Joystick.background:setFillColor(0.5)
Joystick.movedStick:setFillColor(0.7)
function enterFrame(event)
if Joystick.isActivated() then
local vector = Joystick.getVector()
if vector.x < -0.5 then
map.x = map.x + 2
zombie.x = zombie.x + 2
hero.rotation = 270
hero.direction = “left”
elseif vector.x > 0.5 then
map.x = map.x - 2
zombie.x = zombie.x -2
hero.rotation = 90
hero.direction = “right”
end
if vector.y < -0.5 then
map.y = map.y + 2
zombie.y = zombie.y + 2
hero.rotation = 0
hero.direction = “up”
elseif vector.y > 0.5 then
map.y = map.y - 2
zombie.y = zombie.y-2
hero.rotation = 180
hero.direction = “down”
end
end
end
local AttackCoolDown = 0
function Attack(event)
if(event.phase == “began”) then
if AttackCoolDown == 0 then
hero.isVisible = false
local attackHitbox = display.newRect( display.contentCenterX, display.contentCenterY, 100, 90 )
timer.performWithDelay( 200, function()
physics.addBody(attackHitbox,“static”)
end)
local mehaAttackAnimation = display.newSprite( AttackAnimationSheet, sequenceData )
mehaAttackAnimation.x = display.contentCenterX
mehaAttackAnimation.y = display.contentCenterY
if hero.direction == “up” then
mehaAttackAnimation.rotation = 0
attackHitbox.x = display.contentCenterX
attackHitbox.y = display.contentCenterY - 100
attackHitbox.rotation = 180
elseif hero.direction == “right” then
mehaAttackAnimation.rotation = 90
elseif hero.direction == “down” then
mehaAttackAnimation.rotation = 180
elseif hero.direction == “left” then
mehaAttackAnimation.rotation = 270
end
mehaAttackAnimation:play()
AttackCoolDown = 1
timer.performWithDelay( 500, function()
hero.isVisible = true
physics.removeBody(attackHitbox)
attackHitbox:removeSelf()
mehaAttackAnimation:removeSelf()
AttackCoolDown = 0
end)
end
end
end
function hpDetection(event)
if hero.hp == 0 then
composer.removeScene( “scenes.survival_gamemode” )
end
end
timer.performWithDelay( 2000, loadingEnd )
function enemy()
if zombie.x < display.contentCenterX then
zombie.x = zombie.x + 1
end
if zombie.y > display.contentCenterY then
zombie.y = zombie.y - 1
end
if zombie.x > display.contentCenterX then
zombie.x = zombie.x - 1
end
if zombie.y < display.contentCenterY then
zombie.y = zombie.y + 1
end
zombie.rotation = 90 + math.deg(math.atan2(zombie.y - hero.y, zombie.x - hero.x))
end
--Runtime:addEventListener(“enterFrame”, enemy); --(I did this for testing)
Runtime:addEventListener(“enterFrame”, hpDetection);
AttackButton:addEventListener(“touch”, Attack);
zombie:addEventListener(“collision”, zombie);
Runtime:addEventListener(“enterFrame”, enterFrame)
end
function scene:destroy(event)
physics.stop()
composer.gotoScene(“scenes.lobby”)
end
scene:addEventListener(“create”, scene);
scene:addEventListener(“destroy”, scene)
return scene;
[/lua]