之前写了个C++版本的,现在改成lua的,

两者原理是一样,但是动作的执行方式有些微区别

(因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方法)

下载地址:https://github.com/chenquanjun/Quick-x-CCLabelChange

c++版本的也放到这个号了

--演示

--使用方法

  1. do
  2. local label = CCLabelTTF:create("", "Arial", )
  3. label:setPosition(display.cx - , display.cy)
  4. self:addChild(label)
  5. local action = CCLabelChange:create(label, , , )
  6.  
  7. action:playAction()
  8. end
  9.  
  10. do
  11. local label = CCLabelTTF:create("", "Arial", )
  12. label:setPosition(display.cx + , display.cy)
  13. label:setColor(ccc3(, , ))
  14. self:addChild(label)
  15. local action = CCLabelChange:create(label, , , )
  16.  
  17. action:playAction()
  18. end
  19.  
  20. do
  21. local label = CCLabelTTF:create("", "Arial", )
  22. label:setPosition(display.cx - , display.cy - )
  23. label:setColor(ccc3(, , ))
  24. self:addChild(label)
  25. local action = CCLabelChange:create(label, , -, )
  26.  
  27. action:playAction()
  28. end
  29.  
  30. do
  31. local label = CCLabelTTF:create("", "Arial", )
  32. label:setPosition(display.cx + , display.cy - )
  33. label:setColor(ccc3(, , ))
  34. self:addChild(label)
  35. local action = CCLabelChange:create(label, , , )
  36.  
  37. action:playAction()
  38. end

--源代码

  1. CCLabelChange = class("CCLabelChange", function()
  2. local node = display.newNode()
  3. node:setNodeEventEnabled(true)
  4. return node
  5. end)
  6. --index
  7. CCLabelChange.__index = CCLabelChange
  8. CCLabelChange._duration = -
  9. CCLabelChange._fromNum = -
  10. CCLabelChange._toNum = -
  11. CCLabelChange._target = nil
  12. CCLabelChange._isPause = false
  13.  
  14. --初步使用思路
  15. --创建对象时候自动将本对象addChild(因为基于schedule执行)
  16. --动作执行完毕后从父类移除,并通过某种方式标记执行完毕(例如在使用对象加字段,nil表示完毕)
  17.  
  18. --因为不是继承CCActionInterval,所以需要传入target对象
  19. function CCLabelChange:create(target, duration, fromNum, toNum)
  20. local ret = CCLabelChange.new()
  21. ret:init(target, duration, fromNum, toNum)
  22. return ret
  23. end
  24.  
  25. function CCLabelChange:init(target, duration, fromNum, toNum)
  26. self._duration = duration
  27. self._fromNum = fromNum
  28. self._toNum = toNum
  29. self._target = target
  30.  
  31. target:addChild(self) --基于此执行
  32. end
  33.  
  34. --两种情况下执行此方法 1、动作执行完毕 2、同类动作,旧动作在执行中,新动作需要执行,此时把旧动作移除
  35. function CCLabelChange:selfKill()
  36. self._target._labelChange:unscheduleUpdate() --停止scheduler
  37. self:removeFromParentAndCleanup(true) --从父类移除
  38. self._target._labelChange = nil --把引用删除
  39. self._target = nil
  40. end
  41.  
  42. function CCLabelChange:pauseAction()
  43. self._isPause = true
  44. end
  45.  
  46. function CCLabelChange:resumeAction()
  47. self._isPause = false
  48. end
  49.  
  50. function CCLabelChange:playAction()
  51. local oldAction = self._target._labelChange
  52.  
  53. if oldAction then
  54. --旧动作存在
  55. oldAction:selfKill()
  56. end
  57.  
  58. self._target._labelChange = self --引用变成自己
  59.  
  60. local curTime =
  61. local duration = self._duration
  62.  
  63. local function int(x)
  64. return x>= and math.floor(x) or math.ceil(x)
  65. end
  66.  
  67. local function updateLabelNum(dt)
  68. if self._isPause then
  69. return
  70. end
  71.  
  72. curTime = curTime + dt
  73.  
  74. --这个类似动作里面的updatetime参数
  75. local time = curTime / duration
  76.  
  77. if self._target then
  78. if time < then --执行时间内
  79. local tempNum = int((self._toNum - self._fromNum) *time) --取整
  80. local num = self._fromNum + tempNum
  81.  
  82. self._target:setString(num)
  83. else
  84. self._target:setString(self._toNum)
  85. self:selfKill()
  86. end
  87.  
  88. else
  89. error("target not exist")
  90. end
  91.  
  92. end
  93.  
  94. self:unscheduleUpdate()
  95. self:scheduleUpdate(updateLabelNum)
  96. end
  97.  
  98. function CCLabelChange:onEnter()
  99. -- print("enter")
  100. end
  101.  
  102. function CCLabelChange:onExit()
  103. print("exit")
  104. self:unscheduleUpdate()
  105. end

CCLabelChange

[Quick-x lua]CCLabel类数字变化动作的更多相关文章

  1. [cocos2dx动作]CCLabel类数字变化动作

    cococs2dx的CCLabel类的数字变化动作 介绍: 简单的数字变化动作(适用于CCLabel类对象, 包括CCLabelTTF, CCLabelAtlas, CCLabelBMFont等等) ...

  2. [cocos2dx 3.x]Label类数字变化动作

    之前写了个2.14版本的动作变化,见 http://www.cnblogs.com/creeper/p/3531304.html 3.x版本变化了很多,但是核心思想还是没有变化,所以对应3.x版本的改 ...

  3. 【Cocos2d-X开发学习笔记】第18期:动作类之改变动作对象、函数回调动作以及过程动作的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.改变动作执行对象 CCTargetedAct ...

  4. 让数字变化炫酷起来,数字滚动Text组件[Unity]

    让数字滚动起来 上周我的策划又提了样需求,当玩家评分发生变动时,屏幕出现人物评分浮层UI,播放评分数字滚动动画.这类数字滚动需求非常常见,我就按一般思路,将startvalue与endvalue每隔一 ...

  5. lua学习:lua中“类”的实现

    在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...

  6. 2019-9-2-win10-uwp-随着数字变化颜色控件

    title author date CreateTime categories win10 uwp 随着数字变化颜色控件 lindexi 2019-09-02 12:57:38 +0800 2018- ...

  7. quick cocos2dx lua 内存释放

    前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...

  8. UICountingLabel实现数字变化的动画效果-b

    在大多数金融类 app 上或者其他 app 需要数字展示的地方, 经常会有如下的动画效果: 动画效果 怎么做呢? 一.下载UICountingLabel 下载地址: https://github.co ...

  9. Lua面向对象----类、继承、多继承、单例的实现

    (本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...

随机推荐

  1. redirect_uri参数错误解决方法

    坑,微信改来改去的,找死人了,以前在“开发者中心”中,现在改在”接口权限“中了.

  2. WCF编程系列(七)信道及信道工厂

    WCF编程系列(七)信道及信道工厂   信道及信道栈 前面已经提及过,WCF中客户端与服务端的交互都是通过消息来进行的.消息从客户端传送到服务端会经过多个处理动作,在WCF编程模型中,这些动作是按层 ...

  3. UIMenuController/UIPasteboard(2) UITableView上实用剪贴板

    在UITableView上实用剪贴板有两种方法: 一.在tableView的代理方法中直接有三个有关剪贴板的方法. //某行是否允许show菜单 -(BOOL)tableView:(UITableVi ...

  4. Mysql 流程控制

    流程控制 分支结构 if分支结构 语法:     if 条件then         -- 语句体     else         -- 缺省语句体     end if; 示例: 循环结构 whi ...

  5. Python 问题集

    1.问题:打开Python的IDLE(集成开发环境/Integrated DeveLopment Environment) 然后在Python的shell中做如下动作时: >>>py ...

  6. SQL 不同的数据类型

    SQL 不同的数据类型 1.SQL TEXT 2.SQL VARCHAR(SIZE) VARCHAR(X) Case: user name, email, country, subject, pass ...

  7. 代码版本管理/SVN/Git

    代码版本管理 一.SVN 1.SVN diff(create patch) 遇到了一个问题: Index: 通信协议.doc ===================================== ...

  8. Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组

    1069 关押罪犯 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description S 城现有两座监狱,一共 ...

  9. 点击按钮文字变成input框,点击保存变成文字

    <!DOCTYPE html><html lang="en"> <head> <meta http-equiv="Content ...

  10. 【BZOJ】1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不 ...