您的位置:首页 > 移动开发 > Cocos引擎

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

2015-11-11 10:03 661 查看
上一篇我们讲了豌豆射手的实现,在这一篇中,我们就来完成坚果和向日葵的是实现,向日葵会生产太阳,所以我们先来完成太阳类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

到这里我们的植物就都创建好了,下一篇我们来讲植物和僵尸之间的战斗逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息