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

前端之家收集整理的这篇文章主要介绍了使用Cocos2d-lua开发植物大战僵尸12-碰撞检测前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

cheak函数如下:

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


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


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


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

猜你在找的Cocos2d-x相关文章