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

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


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

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...