我们在主场景的触摸事件中,已经判定了玩家选择的植物类型,以及放置的位置,并把它们设置给了战斗层FightLayer,然后调用FightLayer的添加植物方法addPlant添加了植物,植物类的创建我会在后面讲到,现在我们就先当这些类是存在的就好了;我们就来看看这个函数的实现:
因为要用到植物对象,所以我们先把植物类导进来:
local Nut = require("app.plant.Nut") local Pease = require("app.plant.Pease") local SunFlower = require("app.plant.SunFlower")
下面是添加植物方法的实现
function FightLayer:addPlant(event) -- checkint 检查是否为数字并且转换为整形 -- 根据玩家所点的位置,计算出行数和列数 local col=checkint((event.x+LAWN_WIDTH/2-58)/LAWN_WIDTH) local row=checkint((event.y+LAWN_HEIGHT/2)/LAWN_HEIGHT) -- 如果越界,返回 if col<1 or col >9 or row<1 or row>5 then return end -- 如果对应的位置可以放植物并且植物类型不为NOT_PLANT,即说明玩家有选择某一种类型的植物 if self.lawnMatrix[row][col] and self.choosePlantType~=NOT_PLANT then -- 在该行该列中添加对应类型的植物 self:addPlantObj(row,col) -- 此时该位置不能放植物了 self.lawnMatrix[row][col]=false -- 植物添加之后,表示有没有选择植物 self.choosePlantType=NOT_PLANT -- 被选择的卡片 local plantCard=self:getParent().myPlants[self:getParent().clickCardIndex] -- 玩家能力值减少 self:getParent().dataLayer:loseEnergy(plantCard.energy) self:getParent().clickCardIndex=0 -- 卡片冷却 plantCard.isCooling=true -- 5秒后冷却结束 plantCard.plantCard:runAction(cc.Sequence:create(cc.FadeTo:create(5.0,255),cc.CallFunc:create(function() plantCard.isCooling=false end))) end end 更具植物类型创建并添加植物 function FightLayer:addPlantObj(row,col) local plant=nil -- 如果是坚果类型 if self.choosePlantType==NUT then -- 创建坚果 plant = Nut.new() :addTo(self) -- 添加到非攻击类型植物的数组中 table.insert(self.defensePlants,plant) elseif self.choosePlantType==SUNFLOWER then -- print("添加向日葵") plant = SunFlower.new() :addTo(self) table.insert(self.defensePlants,plant) elseif self.choosePlantType==PEASE then -- print("添加豌豆射手") plant = Pease.new() :addTo(self) table.insert(self.attackPlants,plant) end -- 植物所在列和行 plant.row=row plant.col=col -- 将植物添加到植物table中 table.insert(self.allPlants,plant) -- 更具行列数设置植物的位置 plant:setPosition(cc.p(col*LAWN_WIDTH+40,row*LAWN_HEIGHT-15)) end
运行效果如下:
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|