local scheduler = require("framework.scheduler")
-- 定时器检测
scheduler.scheduleGlobal(function ( )
-- 攻击
self:checkCollision()
end
function FightLayer:checkCollision( )
if not self.hero.isAttack then return end --是攻击状态才检测
-- 英雄Rect 三木运算符 方向根据脸的方向来定
local x = self.hero.face == "right" and self.hero:getPositionX() or self.hero:getPositionX() - self.hero.atkSize.width
local y = self.hero:getPositionY()
local heroAtkRect = cc.rect( x, y, self.hero.atkSize.width,self.hero.atkSize.height )
for i,v in ipairs(self.npcs) do
local npcRect = cc.rect( v:getPositionX() - v.size.width*0.5, v:getPositionY(),v.size.width,v.size.height)
if cc.rectIntersectsRect(heroAtkRect, npcRect) then
-- print("打到了")
-- NPC受伤动作
v:setHurt(true)
-- 伤害(范围值)
local damage = math.random(self.hero.minAtk,self.hero.maxAtk)
v.hp = v.hp - damage
-- 判断NPC血量 如果大于0 执行掉血 ,小于等于0 死亡
if v.hp > 0 then
-- 掉血动画
local frames = display.newFrames("blood_%04d.png",0,9)
self.blood = display.newSprite()
local animation = display.newAnimation(frames, 0.05)
local animate = cc.Animate:create(animation)
local seq = transition.sequence({
animate,
cc.DelayTime:create(5),
cc.RemoveSelf:create(),
})
self.blood:runAction(seq)
self:addChild(self.blood)
self.blood:setPosition(v:getPositionX(), v:getPositionY()+v.size.height*2)
else
v:setDead(true)
table.remove(self.npcs,i)
end
end
end
end