植物卡片具有不同类型,使用不同植物消耗的能量值也不同,当植物卡片在A槽的时候,点击植物卡片,卡片会移动到B槽,点击B槽的植物卡片,B槽的植物卡片会移动到在A槽原来的位置,所以还要为卡片添加触摸事件,卡片被使用之后还有一段时间的冷却时间,所以还要有是否在冷却中的属性。在src/app下创建card文件夹,在改文件夹下创建PlantCard类,下面是卡片类的代码:
local PlantCard = class("PlantCard",function() return display.newNode() end) function PlantCard:ctor(type) -- 植物类型 self.plantType=type -- 植物所需要消耗的能量 self.energy=PLANT_NEED_ENERGY[self.plantType] -- 是否在被选择的方框内 self.inChooseWindow=true -- 是否在移动 self.isMove=false -- 卡片是否在冷却中 self.isCooling=false -- 根据类型创建不同的植物卡片 fight/chose/是图片路径 ..相当于拼接 CAN_CHOOSE_PLANT是图片名称数组 在配置文件config.lua中进行配置 self.plantCard=display.newSprite("fight/chose/"..CAN_CHOOSE_PLANT[self.plantType]) :align(display.LEFT_BOTTOM,0) :addTo(self) self:setContentSize(self.plantCard:getContentSize()) self:setAnchorPoint(cc.p(0.5,0.5)) end -- 卡片初始化函数 function PlantCard:init() -- 卡片的初始位置 self.startPos=cc.p(self:getPositionX(),self:getPositionY()) -- 为卡片添加监听事件 self:setTouchEnabled(true) self:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE) self:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event) -- 如果已经开打了或者卡片正在移动中,不处理触摸事件 if self:getParent().isFightstage or self.isMove then return end if event.name=="began" then -- 如果卡片在被选择的方框中并且选择的卡片还没满 if self.inChooseWindow and #self:getParent().myPlants<5 then -- 卡片移动到玩家的植物槽中 self.isMove = true self:runAction(cc.Sequence:create(cc.Spawn:create(cc.ScaleTo:create(1.0,0.5),cc.MoveTo:create(1.0,cc.p(35+#self:getParent().myPlants*27,display.height-5))),cc.CallFunc:create(function() self.isMove = false end))) -- 该卡片已经不在被选中的方框中 self.inChooseWindow=false -- 加入玩家所持有植物数组中 table.insert(self:getParent().myPlants,self) -- 将该卡片从可以被选择的卡片数组中移除 table.removebyvalue(self:getParent().canChooseplants,self) -- 否则如果卡片不在被选择的植物方框中,也就是在玩家所持有的植物方框中 elseif not self.inChooseWindow then -- 卡片移动到一开始的位置 self.isMove = true self:runAction(cc.Sequence:create(cc.Spawn:create(cc.ScaleTo:create(1.0,1.0),self.startPos)),cc.CallFunc:create(function() self.isMove = false end))) -- 获取卡片在我所持有植物数组中的下标 local index=table.indexof(self:getParent().myPlants,self) -- 此时卡片又返回被选择植物的方框中,所以添加到canChooseplants数组中 table.insert(self:getParent().canChooseplants,self) -- 将该卡片从玩家所持有的卡片数组中移除 table.removebyvalue(self:getParent().myPlants,self) self.inChooseWindow=true -- 调整玩家所持有卡片 for i=index,5 do if self:getParent().myPlants[i] then self:getParent().myPlants[i]:runAction(cc.MoveBy:create(0.5,cc.p(-27,0))) end end end end return true end) end -- 设置卡片透明度 function PlantCard:setCardOpacity(value) self.plantCard:setOpacity(value) end return PlantCard 到此卡片类就创建完毕了,下一篇我们就来看看僵尸类是怎么实现的。