使用Cocos2d-lua开发植物大战僵尸12-碰撞检测
2015-11-11 10:58
549 查看
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
最后附上源码和资源下载链接:->点击打开链接
我们在战斗层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
最后附上源码和资源下载链接:->点击打开链接
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- 浅析Ruby的源代码布局及其编程风格
- asp.net 抓取网页源码三种实现方法
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- jQuery源码分析之jQuery中的循环技巧详解
- 本人自用的global.js库源码分享
- java中原码、反码与补码的问题分析
- PHP网页游戏学习之Xnova(ogame)源码解读(六)
- C#获取网页HTML源码实例
- PHP网页游戏学习之Xnova(ogame)源码解读(八)
- PHP网页游戏学习之Xnova(ogame)源码解读(四)
- JS小游戏之极速快跑源码详解
- JS小游戏之象棋暗棋源码详解
- android源码探索之定制android关机界面的方法
- 基于Android设计模式之--SDK源码之策略模式的详解
- Android游戏源码分享之2048
- C语言借助EasyX实现的生命游戏源码
- C实现的非阻塞方式命令行端口扫描器源码
- PHP网页游戏学习之Xnova(ogame)源码解读(七)