使用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
到这里我们的植物就都创建好了,下一篇我们来讲植物和僵尸之间的战斗逻辑。
在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
到这里我们的植物就都创建好了,下一篇我们来讲植物和僵尸之间的战斗逻辑。
相关文章推荐
- 零基础ios开发(五 深入理解继承—植物大战僵尸 )
- 提供一些Android免费课程分享给大家
- 植物大战僵尸2安卓版(1.2.0版本)阳光修改方法
- 植物大战僵尸项目总结
- 使用Cocos2D-x引擎在Mac下开发运行在iOS设备上的《植物大战僵尸》第一篇
- IOS 实现植物大战僵尸
- C++ VS2013 植物 禁止CD功能 一
- C++ VS2013 修改金钱 二
- C++ VS2013 植物 禁止CD功能 一
- C++ VS2013 修改金钱 二
- C++ VS2013 修改阳光 三
- C++ VS2013 种植物 四
- 《植物大战僵尸2》中国区上架了
- [示例代码]植物大战僵尸网页版
- HTML5--植物大战僵尸网页版
- 游戏外挂技术:编程实现内存检索(检索内存中指定数据)
- 使用Quick-Cocos2d-x开发植物大战僵尸03-游戏加载页面
- 使用Quick-Cocos2d-x开发植物大战僵尸04-展示植物卡片与僵尸
- 使用Cocos2d-lua开发植物大战僵尸05-植物卡片类的实现
- 使用Cocos2d-lua开发植物大战僵尸06-僵尸类的实现