使用Cocos2d-lua开发植物大战僵尸11-植物类的实现下

上一篇我们讲了豌豆射手的实现,在这一篇中,我们就来完成坚果和向日葵的是实现,向日葵会生产太阳,所以我们先来完成太阳类Sun。

在src/app下创建一个文件夹product,在文件夹下创建Sun类,

local Sun = class("sun",function()
return display.newSprite("product/sun.png")
end)


function Sun:ctor()
self:setScale(0.5)
  --旋转
self:runAction(cc.RepeatForever:create(cc.RotateBy:create(2.0,360)))
  -- 默认太阳没被点击
self.isTouch=false
  -- 贝塞尔曲线
local bezier = {  
    cc.p(self:getPositionX(), self:getPositionY()),  
    cc.p(self:getPositionX()+25, self:getPositionY()+50),  
    cc.p(self:getPositionX()+50, self:getPositionY()-20),  
  }  
  local bezierAction = cc.BezierBy:create(1.0, bezier) 
  -- 太阳出现5秒之后还没被点击 移除
  self:runAction(cc.Sequence:create(bezierAction,cc.DelayTime:create(5.0),cc.CallFunc:create(function()
  if not self.isTouch then
  self:removeFromParent()
  end
  end)))
  -- 触摸监听
  self:setTouchEnabled(true)
  self:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)
  self:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
    -- 如果被点击了
  if event.name=="began" then
  self.isTouch=true
      -- 一边缩小,一边向左上角移动
  local targetPos=cc.p(17,display.height-15)
  local time=self:getTwoPosDistance(self:getPositionX(),self:getPositionY(),targetPos.x,targetPos.y)/200
  local scale=cc.ScaleTo:create(time,0.25)
  local move=cc.MoveTo:create(time,targetPos)
  self:runAction(cc.Sequence:create(cc.Spawn:create(scale,move),cc.CallFunc:create(function()
        -- 玩家能量值增加
  self:getParent():getParent().dataLayer:addEnergy(SUN_ENERGY)
  self:removeFromParent()
  end)))
  end
  return true
  end)


end


function Sun:getTwoPosDistance(x1,y1,x2,y2)
return math.sqrt(math.pow(math.abs(x1-x2), 2)+math.pow(math.abs(y1-y2), 2))
end


return Sun

向日葵类很简单,继承植物基类,设置动画,之后每隔10秒生产一个太阳,如下:

local Sun = require("app.product.Sun")
local PlantBase = require("app.plant.PlantBase")
local SunFlower = class("SunFlower",function()
return PlantBase.new("plant/sunflower/p_1_%02d.png")
end)


function SunFlower:ctor()
self.currentHP=10
self:palyAnim("sunflowerAnim",8,"plant/sunflower/p_1_%02d.png")
-- 每隔10秒,生产一个太阳
local repeatFunction=cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(10.0),cc.CallFunc:create(function()
self:productSun()
end)))
self:runAction(repeatFunction)
end


function SunFlower:productSun()
Sun.new()
:pos(self:getPositionX(), self:getPositionY())
:addTo(self:getParent())
end


return SunFlower

坚果是防御性植物,相对于其他植物血量就比较高而已:

local PlantBase = require("app.plant.PlantBase")
local Nut = class("Nut",function()
return PlantBase.new("plant/nut/p_3_%02d.png")
end)


function Nut:ctor()
self.currentHP=20
self:palyAnim("nutAnim",11,"plant/nut/p_3_%02d.png")
end


return Nut

到这里我们的植物就都创建好了,下一篇我们来讲植物和僵尸之间的战斗逻辑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值