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
最后附上源码和资源下载链接:->点击打开链接 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|