使用Cocos2d-lua开发植物大战僵尸05-植物卡片类的实现


植物卡片具有不同类型,使用不同植物消耗的能量值也不同,当植物卡片在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, 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),cc.MoveTo:create(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

到此卡片类就创建完毕了,下一篇我们就来看看僵尸类是怎么实现的。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值