[Quick-x lua]CCLabel类数字变化动作
之前写了个C++版本的,现在改成lua的,
两者原理是一样,但是动作的执行方式有些微区别
(因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方法)
下载地址:https://github.com/chenquanjun/Quick-x-CCLabelChange
c++版本的也放到这个号了
--演示

--使用方法
do
local label = CCLabelTTF:create("", "Arial", )
label:setPosition(display.cx - , display.cy)
self:addChild(label)
local action = CCLabelChange:create(label, , , ) action:playAction()
end do
local label = CCLabelTTF:create("", "Arial", )
label:setPosition(display.cx + , display.cy)
label:setColor(ccc3(, , ))
self:addChild(label)
local action = CCLabelChange:create(label, , , ) action:playAction()
end do
local label = CCLabelTTF:create("", "Arial", )
label:setPosition(display.cx - , display.cy - )
label:setColor(ccc3(, , ))
self:addChild(label)
local action = CCLabelChange:create(label, , -, ) action:playAction()
end do
local label = CCLabelTTF:create("", "Arial", )
label:setPosition(display.cx + , display.cy - )
label:setColor(ccc3(, , ))
self:addChild(label)
local action = CCLabelChange:create(label, , , ) action:playAction()
end
--源代码
CCLabelChange = class("CCLabelChange", function()
local node = display.newNode()
node:setNodeEventEnabled(true)
return node
end)
--index
CCLabelChange.__index = CCLabelChange
CCLabelChange._duration = -
CCLabelChange._fromNum = -
CCLabelChange._toNum = -
CCLabelChange._target = nil
CCLabelChange._isPause = false
--初步使用思路
--创建对象时候自动将本对象addChild(因为基于schedule执行)
--动作执行完毕后从父类移除,并通过某种方式标记执行完毕(例如在使用对象加字段,nil表示完毕)
--因为不是继承CCActionInterval,所以需要传入target对象
function CCLabelChange:create(target, duration, fromNum, toNum)
local ret = CCLabelChange.new()
ret:init(target, duration, fromNum, toNum)
return ret
end
function CCLabelChange:init(target, duration, fromNum, toNum)
self._duration = duration
self._fromNum = fromNum
self._toNum = toNum
self._target = target
target:addChild(self) --基于此执行
end
--两种情况下执行此方法 1、动作执行完毕 2、同类动作,旧动作在执行中,新动作需要执行,此时把旧动作移除
function CCLabelChange:selfKill()
self._target._labelChange:unscheduleUpdate() --停止scheduler
self:removeFromParentAndCleanup(true) --从父类移除
self._target._labelChange = nil --把引用删除
self._target = nil
end
function CCLabelChange:pauseAction()
self._isPause = true
end
function CCLabelChange:resumeAction()
self._isPause = false
end
function CCLabelChange:playAction()
local oldAction = self._target._labelChange
if oldAction then
--旧动作存在
oldAction:selfKill()
end
self._target._labelChange = self --引用变成自己
local curTime =
local duration = self._duration
local function int(x)
return x>= and math.floor(x) or math.ceil(x)
end
local function updateLabelNum(dt)
if self._isPause then
return
end
curTime = curTime + dt
--这个类似动作里面的update的time参数
local time = curTime / duration
if self._target then
if time < then --执行时间内
local tempNum = int((self._toNum - self._fromNum) *time) --取整
local num = self._fromNum + tempNum
self._target:setString(num)
else
self._target:setString(self._toNum)
self:selfKill()
end
else
error("target not exist")
end
end
self:unscheduleUpdate()
self:scheduleUpdate(updateLabelNum)
end
function CCLabelChange:onEnter()
-- print("enter")
end
function CCLabelChange:onExit()
print("exit")
self:unscheduleUpdate()
end
CCLabelChange
[Quick-x lua]CCLabel类数字变化动作的更多相关文章
- [cocos2dx动作]CCLabel类数字变化动作
cococs2dx的CCLabel类的数字变化动作 介绍: 简单的数字变化动作(适用于CCLabel类对象, 包括CCLabelTTF, CCLabelAtlas, CCLabelBMFont等等) ...
- [cocos2dx 3.x]Label类数字变化动作
之前写了个2.14版本的动作变化,见 http://www.cnblogs.com/creeper/p/3531304.html 3.x版本变化了很多,但是核心思想还是没有变化,所以对应3.x版本的改 ...
- 【Cocos2d-X开发学习笔记】第18期:动作类之改变动作对象、函数回调动作以及过程动作的使用
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.改变动作执行对象 CCTargetedAct ...
- 让数字变化炫酷起来,数字滚动Text组件[Unity]
让数字滚动起来 上周我的策划又提了样需求,当玩家评分发生变动时,屏幕出现人物评分浮层UI,播放评分数字滚动动画.这类数字滚动需求非常常见,我就按一般思路,将startvalue与endvalue每隔一 ...
- lua学习:lua中“类”的实现
在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...
- 2019-9-2-win10-uwp-随着数字变化颜色控件
title author date CreateTime categories win10 uwp 随着数字变化颜色控件 lindexi 2019-09-02 12:57:38 +0800 2018- ...
- quick cocos2dx lua 内存释放
前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...
- UICountingLabel实现数字变化的动画效果-b
在大多数金融类 app 上或者其他 app 需要数字展示的地方, 经常会有如下的动画效果: 动画效果 怎么做呢? 一.下载UICountingLabel 下载地址: https://github.co ...
- Lua面向对象----类、继承、多继承、单例的实现
(本文转载)学习之用,侵权立删! 原文地址 http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...
随机推荐
- SQL Server调优系列进阶篇 - 深入剖析统计信息
前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...
- ubuntu下aircrack-ng的wifi破解
首先安装aircrack-ng,apt-get install aircrack-ng. 然后打开shell,输入airmon-ng start wlan0. 输入airodump-ng mon0. ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...
- iOS 各种控件默认高度
1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半 ...
- Express安装与调试
Express 是基于Node.Js平台,快速.开放.极简的 web 开发框架. 1.安装 Express的安装通过cmd来进行,过程如下: 首先,先在本地建立一个项目文件夹,取名Nodejs. 然后 ...
- dorado抽取js
dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...
- UTF-8/UTF-16/UTF-32
UTF-8/UTF-16/UTF-32 一.UTF-8/UTF-16/UTF-32三者的区别 二.BOM的检测与删除 1.用VIM去除<feff>,即 U+FEFF.注意:这是一个字符,而 ...
- 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...
- yiic创建YII应用 "php.exe"不是内部或外部命令 解决办法
第一步:运行CMD命令. 第二步:进入Yiic文件的目录 (例如在D盘里面 D:/yii/framework) 第三步:D:\yii\framework>yiic webapp D: ...
- Linux初始root密码设置
刚安装好的Linux系统是没有设置root用户密码的,下边介绍如何设置root用户的密码 第一步:sudo passwd 第二步:输入密码 第三步:确认密码 这样三个步骤过后root用户的密码就设置好 ...