上一篇我们讲了豌豆射手的实现,在这一篇中,我们就来完成坚果和向日葵的是实现,向日葵会生产太阳,所以我们先来完成太阳类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
到这里我们的植物就都创建好了,下一篇我们来讲植物和僵尸之间的战斗逻辑。