Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条)
Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条)
本篇博客介绍Cocos2d-x中的进度条动画,进度条涉及以下几个重要的类和方法,笔者来给大家具体解说一下:
ProgressTo类:进度控制器,控制进度从当前进度变化到某个值。
事实上它就是一个动作。控制进度条变化。
它的类继承图例如以下:
ProgressTimer是Node的子类。
该类依据百分比来渲染显示内部的Sprite对象。 变化方向包含径向。水平或者垂直方向。
ProgressFromTo:FromTo进度控制器,控制进度从一个指定值到还有一个值的变化.
这里有两个方法可能是大家比較疑惑的:
left:setMidpoint(cc.p(0, 0))
setMidpoint()函数是设置进度条的起始点,(0,y)表示最左边,(1,,y)表示最右边。(x,1)表示最上面,(x,0)表示最以下。
right:setBarChangeRate(cc.p(1, 0))
setBarChangeRate()函数是用来设置进度条动画方向的,(1,0)表示横方向,(0,1)表示纵方向
以下笔者把样例中的代码贴出来。已经进行了具体的凝视,相应了每一个进度动画效果,如有疑问,能够留言或者加入笔者所创建的群:299402133
-- 获得屏幕大小
local s = cc.Director:getInstance():getWinSize() ------------------------------------
-- SpriteProgressToRadial 绕圆心旋转的进度条、
-- 圆形进度动画是一个绕中心将精灵边缘扫描一圈在这个过程中消失的动画消果。 ------------------------------------
local function SpriteProgressToRadial()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer)
-- 创建并初始化进度,第一个參数是duration持续时间。100为进度
local to1 = cc.ProgressTo:create(2, 100)
local to2 = cc.ProgressTo:create(2, 100) -- ProgressTimer是Node的子类。 该类依据百分比来渲染显示内部的Sprite对象。 变化方向包含径向,水平或者垂直方向。 local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
-- 设置进度计时的类型,这里是绕圆心
left:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
-- 设置显示位置
left:setPosition(cc.p(100, s.height / 2))
-- 执行动作
left:runAction(cc.RepeatForever:create(to1))
-- 加入到层其中
layer:addChild(left) -- 右边的方块
local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathBlock))
-- 设置进度计时的类型
right:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
-- Makes the ridial CCW
right:setReverseDirection(true) -- 设置反向
-- 设置位置
right:setPosition(cc.p(s.width - 100, s.height / 2))
-- 执行动作。无限循环
right:runAction(cc.RepeatForever:create(to2))
-- 加入到层其中
layer:addChild(right) -- 设置标题
Helper.subtitleLabel:setString("ProgressTo Radial")
return layer
end ------------------------------------
-- SpriteProgressToHorizontal 条形的横向进度动画演示
------------------------------------
local function SpriteProgressToHorizontal()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) -- 创建进度条
local to1 = cc.ProgressTo:create(2, 100)
local to2 = cc.ProgressTo:create(2, 100) -- 创建进度条的动画渲染器
local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
-- 设置进度条类型。这里是条形进度类型
left:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置圆心位置为左下角
left:setMidpoint(cc.p(0, 0))
-- 设置横向进度条变化率。y=0意味着没有竖向的变化
left:setBarChangeRate(cc.p(1, 0))
-- 设置在x=100,y为屏幕宽度一半的位置
left:setPosition(cc.p(100, s.height / 2))
-- 执行动作
left:runAction(cc.RepeatForever:create(to1))
-- 加入到层中
layer:addChild(left) -- 进度条渲染器。这是右边演示的进度条
local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
-- 设置渲染类型
right:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- Setup for a bar starting from the left since the midpoint is 1 for the x
-- 用来设定进度条横向前进的方向从左向右或是从右向左。这里是从右往左
right:setMidpoint(cc.p(1, 0))
-- Setup for a horizontal bar since the bar change rate is 0 for y meaning no vertical change
-- 用来设置进度条增长按横向或是按纵向增长,这里是横向增长
right:setBarChangeRate(cc.p(1, 0))
-- 设置渲染器到右边
right:setPosition(cc.p(s.width - 100, s.height / 2))
-- 让它执行一个无限循环的进度动画,进度变化由控制器2来控制
right:runAction(cc.RepeatForever:create(to2))
layer:addChild(right) -- 标题
Helper.subtitleLabel:setString("ProgressTo Horizontal")
return layer
end ------------------------------------
-- SpriteProgressToVertical 纵向的条形进度动画演示
------------------------------------
local function SpriteProgressToVertical()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) -- 创建两个进度动画的控制器.2秒进度值变化到100
local to1 = cc.ProgressTo:create(2, 100)
local to2 = cc.ProgressTo:create(2, 100) -- 创建进度条渲染器
local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
-- 设置渲染器进度条类型
left:setType(cc.PROGRESS_TIMER_TYPE_BAR) -- 设置进度起点在左下角
left:setMidpoint(cc.p(0,0))
-- 设置进度条横向无变化,纵向变化
left:setBarChangeRate(cc.p(0, 1))
-- 设置渲染器的位置
left:setPosition(cc.p(100, s.height / 2))
-- 无限循环第一个动画控制器
left:runAction(cc.RepeatForever:create(to1))
-- 加入渲染器到层中
layer:addChild(left) -- 创建右边的进度条渲染器
local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
-- 设置渲染类型
right:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置中心点在左上角
right:setMidpoint(cc.p(0, 1))
-- 设置进度条纵方向变化。横方向不变化
right:setBarChangeRate(cc.p(0, 1))
-- 设置显示位置
right:setPosition(cc.p(s.width - 100, s.height / 2))
-- 让它执行一个无限循环的进度动画。进度变化由控制器2来控制
right:runAction(cc.RepeatForever:create(to2))
layer:addChild(right) -- 设置子标题
Helper.subtitleLabel:setString("ProgressTo Vertical")
return layer
end ------------------------------------
-- SpriteProgressToRadialMidpointChanged
-- 中点可改变的绕中点旋转的进度动画
------------------------------------
local function SpriteProgressToRadialMidpointChanged()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) -- 创建进度动画控制器。2秒完毕100进度值
local action = cc.ProgressTo:create(2, 100) -- 创建一个进度动画的渲染器.使用块色图精灵来渲染
local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathBlock))
-- 设置表现为绕圆心旋转的进度动画。 left:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
-- 设置旋转的中心点在横向靠左1/4位置,纵向靠上3/4位置
left:setMidpoint(cc.p(0.25, 0.75))
-- 设置渲染器的位置在屏幕左边
left:setPosition(cc.p(100, s.height / 2))
-- 让它执行一个无限循环的进度动画,进度变化由action来控制
left:runAction(cc.RepeatForever:create(action))
layer:addChild(left) -- 创建一个进度动画的渲染器.使用块色图精灵来渲染
local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathBlock))
-- 设置表现为绕圆心旋转的进度动画。 right:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
-- 设置旋转的中心点在横向靠右3/4位置。纵向靠上1/4位置
right:setMidpoint(cc.p(0.75, 0.25)) --[[
Note the reverse property (default=NO) is only added to the right image. That's how
we get a counter clockwise progress.
]]
right:setPosition(cc.p(s.width - 100, s.height / 2))
right:runAction(cc.RepeatForever:create(action))
layer:addChild(right) -- 设置子标题
Helper.subtitleLabel:setString("Radial w/ Different Midpoints")
return layer
end ------------------------------------
-- SpriteProgressBarVarious
--
------------------------------------
local function SpriteProgressBarVarious()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) -- 创建进度动画控制器,2秒完毕100进度值
local to = cc.ProgressTo:create(2, 100) -- 创建进度动画渲染器,使用女演员精灵来渲染
local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
-- 设置表现为条形的进度动画
left:setType(cc.PROGRESS_TIMER_TYPE_BAR) -- 设置起始位置在中间
left:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度条横向变化。纵向不变化
left:setBarChangeRate(cc.p(1, 0))
-- 设置到屏幕左边
left:setPosition(cc.p(100, s.height / 2))
-- 让它执行一个无限循环的进度动画
left:runAction(cc.RepeatForever:create(cc.ProgressTo:create(2, 100)))
layer:addChild(left) local middle = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
middle:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置起始位置在中间
middle:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度变化横纵方向都有变化
middle:setBarChangeRate(cc.p(1, 1))
-- 设置精灵显示在中间
middle:setPosition(cc.p(s.width/2, s.height/2))
-- 让它执行一个无限循环的进度动画
middle:runAction(cc.RepeatForever:create(cc.ProgressTo:create(2, 100)))
layer:addChild(middle) local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
-- 设置表现为条形的进度动画
right:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置起始位置在中间
right:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度条横方向不变化,纵方向变化
right:setBarChangeRate(cc.p(0, 1))
-- 设置精灵的位置在右边
right:setPosition(cc.p(s.width-100, s.height/2))
right:runAction(cc.RepeatForever:create(cc.ProgressTo:create(2, 100)))
layer:addChild(right) -- 设置子标题
Helper.subtitleLabel:setString("ProgressTo Bar Mid")
return layer
end ------------------------------------
-- SpriteProgressBarTintAndFade
-- 进度动画之颜色,透明度的变化
------------------------------------
local function SpriteProgressBarTintAndFade()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) -- 创建进度动画控制器,6秒完毕100进度值
local to = cc.ProgressTo:create(6, 100)
-- 创建一个动画序列,先是1秒内变化到红色。再经1秒变化到绿色。最后1秒变化到蓝色。 local tint = cc.Sequence:create(cc.TintTo:create(1, 255, 0, 0), cc.TintTo:create(1, 0, 255, 0), cc.TintTo:create(1, 0, 0, 255))
-- 创建一个动画序列。先是1秒内透明度变化到0而消失。再经1秒变化到255显现
local fade = cc.Sequence:create(cc.FadeTo:create(1.0, 0),cc.FadeTo:create(1.0, 255))
-- 创建进度动画渲染器,使用女演员精灵来渲染
local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
-- 设置表现为条形的进度动画
left:setType(cc.PROGRESS_TIMER_TYPE_BAR) -- 设置起始位置在中间
left:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度条横方向不变化。纵方向变化
left:setBarChangeRate(cc.p(1, 0))
-- 设置在左边
left:setPosition(cc.p(100, s.height / 2))
-- 执行动作。6秒完毕100进度值
left:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100)))
-- 执行动作,先是1秒内变化到红色,再经1秒变化到绿色,最后1秒变化到蓝色
left:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.TintTo:create(1, 255, 0, 0), cc.TintTo:create(1, 0, 255, 0), cc.TintTo:create(1, 0, 0, 255))))
layer:addChild(left) -- 加入标签
left:addChild(cc.Label:createWithTTF("Tint", "fonts/Marker Felt.ttf", 20.0)) -- 创建进度动画渲染器,使用女演员精灵来渲染
local middle = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
-- 设置表现为条形的进度动画
middle:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置起始位置在中间
middle:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度条横方向不变化,纵方向变化
middle:setBarChangeRate(cc.p(1, 1))
-- 设置显示位置到中间
middle:setPosition(cc.p(s.width / 2, s.height / 2))
-- 执行动作。6秒完毕100进度值
middle:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100))) -- 创建淡入淡出的动画
local fade2 = cc.Sequence:create(cc.FadeTo:create(1.0, 0), cc.FadeTo:create(1.0, 255))
middle:runAction(cc.RepeatForever:create(fade2))
layer:addChild(middle) -- 加入标签
middle:addChild(cc.Label:createWithTTF("Fade", "fonts/Marker Felt.ttf", 20.0)) -- 创建进度动画渲染器,使用女演员精灵来渲染
local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister2))
-- 设置表现为条形的进度动画
right:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置起始位置在中间
right:setMidPoint(cc.p(0.5, 0.5))
-- 设置进度条横方向不变化,纵方向变化
right:setBarChangeRate(cc.p(1, 1))
-- 设置位置在右边
right:setPosition(cc.p(s.width - 100, s.height / 2))
--执行动作,6秒完毕100进度值
right:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100)))
-- 先是1秒内变化到红色,再经1秒变化到绿色,最后1秒变化到蓝色
right:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.TintTo:create(1, 255,0,0), cc.TintTo:create(1, 0,255,0), cc.TintTo:create(1, 0,0,255))))
-- 创建淡入淡出的动画
right:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.FadeTo:create(1.0, 0), cc.FadeTo:create(1.0, 255))))
layer:addChild(right) -- 加入标签
right:addChild(cc.Label:createWithTTF("Tint and Fade", "fonts/Marker Felt.ttf", 20.0)) -- 设置子标签
Helper.subtitleLabel:setString("ProgressTo Bar Mid")
return layer
end ------------------------------------
-- SpriteProgressWithSpriteFrame
-- 进度动画之使用序列帧中的单帧精灵来演示
------------------------------------
local function SpriteProgressWithSpriteFrame()
-- 创建层
local layer = cc.Layer:create()
-- 初始化层
Helper.initWithLayer(layer) local to = cc.ProgressTo:create(6, 100)
-- 创建进度动画的控制器.6秒进度值变化到100
cc.SpriteFrameCache:getInstance():addSpriteFrames("zwoptex/grossini.plist")
-- 创建一个进度动画渲染器,使用序列帧中的grossini_dance_01.png图像来进行动画的渲染
local left = cc.ProgressTimer:create(cc.Sprite:createWithSpriteFrameName("grossini_dance_01.png"))
-- 设置表现为条形的进度动画
left:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- 设置起始位置为中点
left:setMidpoint(cc.p(0.5, 0.5))
-- 设置进度条横方向变化,纵方向不变化
left:setBarChangeRate(cc.p(1, 0))
-- 设置显示在左边
left:setPosition(cc.p(100, s.height / 2))
-- 执行动作。6秒完毕100进度值
left:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100)))
layer:addChild(left) -- 创建一个进度动画渲染器,使用序列帧中的grossini_dance_02.png图像来进行动画的渲染
local middle = cc.ProgressTimer:create(cc.Sprite:createWithSpriteFrameName("grossini_dance_02.png"))
middle:setType(cc.PROGRESS_TIMER_TYPE_BAR)
middle:setMidpoint(cc.p(0.5, 0.5))
middle:setBarChangeRate(cc.p(1, 1))
middle:setPosition(cc.p(s.width / 2, s.height / 2))
middle:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100)))
layer:addChild(middle) -- -- 创建一个进度动画渲染器。使用序列帧中的grossini_dance_03.png图像来进行动画的渲染
local right = cc.ProgressTimer:create(cc.Sprite:createWithSpriteFrameName("grossini_dance_03.png"))
right:setType(cc.PROGRESS_TIMER_TYPE_BAR)
-- Setup for a bar starting from the bottom since the midpoint is 0 for the y
right:setMidpoint(cc.p(0.5, 0.5))
-- Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change
right:setBarChangeRate(cc.p(0, 1))
right:setPosition(cc.p(s.width - 100, s.height / 2))
right:runAction(cc.RepeatForever:create(cc.ProgressTo:create(6, 100)))
layer:addChild(right) Helper.subtitleLabel:setString("Progress With Sprite Frame")
return layer
end function ProgressActionsTest()
-- 创建一个场景
local scene = cc.Scene:create() -- 创建方法表
Helper.createFunctionTable = {
SpriteProgressToRadial,
SpriteProgressToHorizontal,
SpriteProgressToVertical,
SpriteProgressToRadialMidpointChanged,
SpriteProgressBarVarious,
SpriteProgressBarTintAndFade,
SpriteProgressWithSpriteFrame
} -- 加入
scene:addChild(SpriteProgressToRadial())
-- 加入返回菜单
scene:addChild(CreateBackMenuItem()) -- 切换场景
cc.Director:getInstance():replaceScene(scene)
end
Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条)的更多相关文章
- Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)
Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理) 本篇博客介绍Cocos2d-x的动作管理样例,这个样例展示了Cocos2d-x的几个动作: MoveTo ...
- Cocos2d-x 3.1.1 Lua演示样例 ActionEaseTest(动作)
Cocos2d-x Lua演示样例 ActionEaseTest(动作) 本篇博客介绍Cocos2d-x中的动作,Cocos2d-x为我们提供了丰富的动作接口,以下笔者就具体介绍一下: 本系列 ...
- Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)
Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...
- Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)
Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...
- Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器)
Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用样例,效果 ...
- Cocos2d-x 3.2 Lua演示样例CurrentLanguageTest(当前语言环境)
Cocos2d-x 3.2 Lua演示样例CurrentLanguageTest(当前语言环境) 转载请注明:IT_xiao小巫 本篇博客介绍Cocos2d-x 3.2给我们提供的一个样例.获取当前程 ...
- Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)
Cocos2d-x 3.2 Lua演示样例FontTest(字体測试) 本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例,主要使用了字体文件来创建我们想要的字体样式: 第 ...
- Cocos2d-x-Lua演示样例项目HelloLua
Cocos2d-x-Lua演示样例项目HelloLua 本篇博客介绍Cocos2d-x中Lua的实例项目,就是使用Cocos2d-x创建的初始项目执行所呈现的农场,这里笔者取名为HelloLua.本篇 ...
- Cocos2d-x 3.2Lua演示样例UserDefaultTest(用户默认配置)
Cocos2d-x 3.2演示样例UserDefaultTest(用户默认配置) 本篇博客介绍Cocos2d-x 3.2演示样例中的UserDefaulstTest,我们在开发中可能须要用到一些默认配 ...
随机推荐
- java多线程之Concurrent包
1.在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题. 2.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的 ...
- 轻量级的REST中间件
轻量级的REST中间件 纯净的REST中间件,绝对的轻量级,不需要安装任何三方控件 基于HTTPS.SYS和WEBSOCKET通信,支持海量并发 支持跨越DELPHI6~DELPHI10.2.2的开发 ...
- Log4j 日志级别
转自:http://michales003.iteye.com/blog/1160605 日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).: 1.static ...
- PHP之is_a()函数执行代码之总结
今天看到云舒在群里贴的漏洞公告,原始的文章在 http://www.byte.nl/blog/2011/09/23/security-bug-in-is_a-function-in-php-5-3-7 ...
- 内向者沟通圣经:4P法(Preparation,Presence,Push,Practice)
一.对于内向者的态度 坦白,坦白也许是个不错的方法,内向不是缺点,只是性格: 拥抱和全面衡量你自己,无论内向还是外向:(我觉得无论是内向还是外向,都应该这么做) 当你无法与自身的思想和平共处,你们开始 ...
- linux下软件的更新命令
linux下软件的更新命令 在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区 ...
- 【云计算】IBM开放云架构
IBM 的开放云架构 通过改变业务和社会运行的方式,云计算开启了丰富的创新途径.开发人员现在正将记录系统与参与性系统相结合,一种新的基于云的应用程序风格正在出现:交互系统.这些应用程序要可持续发展,云 ...
- Android 常见内存泄漏的解决方式
在Android程序开发中.当一个对象已经不须要再使用了,本该被回收时.而另外一个正在使用的对象持有它的引用从而导致它不能被回收.这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了. ...
- 【转】-ECshop数据库表结构
-- 表的结构 `ecs_account_log`CREATE TABLE IF NOT EXISTS `ecs_account_log` (`log_id` mediumint(8) unsigne ...
- 如何免密码直接登陆win7
打开“运行”输入NETPLWIZ,并打开搜索到的程序将“要使用本机,用户必须输入用户名和密码”的勾去掉点 确定在弹出的对话框里填上你想要 自动登陆的 用户名和密码