加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Cocos2d-lua开发植物大战僵尸12-碰撞检测

发布时间:2020-12-14 16:42:26 所属栏目:百科 来源:网络整理
导读:TIPS:在最后我会附上游戏的源码和资源 我们在战斗层FightLayer中添加帧事件,检测僵尸和植物是否碰撞,碰撞的话则是僵尸攻击植物,同样检测子弹与僵尸是否碰撞,碰撞的话则是子弹打中僵尸。 我们先在 FightLayer层的构造函数中启动帧函数 -- 帧事件 self:ad

TIPS:在最后我会附上游戏的源码和资源

我们在战斗层FightLayer中添加帧事件,检测僵尸和植物是否碰撞,碰撞的话则是僵尸攻击植物,同样检测子弹与僵尸是否碰撞,碰撞的话则是子弹打中僵尸。

我们先在FightLayer层的构造函数中启动帧函数

-- 帧事件
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self,self.cheak))
self:scheduleUpdate()

cheak函数如下:

function FightLayer:cheak()
-- 僵尸攻击植物
-- 那每一个僵尸和所有植物去检查是否碰撞
for i,zombie in ipairs(self.zombiesList) do
local isCollision=false
for j,plant in ipairs(self.allPlants) do
-- 如果碰撞
if self:isCollision(zombie,plant,30,20) then
-- 僵尸攻击
zombie:playAttack()
-- 植物被攻击
plant:hurted(zombie:getAttackValue())
isCollision=true
break
end
end
-- 如果没有碰撞 则walk
if not isCollision then
zombie:playWalk()
end
end


-- 子弹攻击僵尸
for i,bullet in ipairs(self.bullets) do
for j,zombie in ipairs(self.zombiesList) do
if self:isCollision(bullet,zombie,20,30) then
-- 僵尸被攻击
zombie:beAttacked(bullet.attackValue)
-- 子弹消失
bullet:over()
break
end
end
end
-- 如果波数是最后一波并且僵尸全被消灭了
if self.currentWaveNum==self.totalWaveNum and #self.zombiesList==0 then
-- 停止帧事件
self:unscheduleUpdate()
app:enterScene("MenuScene",nil,"crossFade",0.5)
end

end


function FightLayer:isCollision(objA,objB,offsetX,offsetY)
local offset=20
local Ax=objA:getPositionX()
local Ay=objA:getPositionY()
local Bx=objB:getPositionX()
local By=objB:getPositionY()
if Ax<Bx+offsetX and Ax>Bx-offsetX and Ay<By+offsetY and Ay>By-offsetY then
return true
end
return false
end


最后附上源码和资源下载链接:->点击打开链接

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读