之前写了个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. cl: cannot open file 'kernel32.lib'

    在测试 jni时, 使用 cl命令, 如 cl -I xx\jdk1.7.0_17\include -I xx\jdk1.7.0_17\include\win32 -LD HelloNative.c ...

  2. HTML——<meta http-equiv="content-type" content="text/html; charset=UTF-8">

    没有添加这句话的编码方式的话,很容易就乱码了 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&g ...

  3. ###学习《C++ Primer》- 3

    点击查看Evernote原文. #@author: gr #@date: 2014-10-04 #@email: forgerui@gmail.com Part 3: STL泛型算法(第10章) 一. ...

  4. 【html】【19】高级篇--大事件时间轴

    下载: http://sc.chinaz.com/jiaoben/131112181390.htm 其它: http://sc.chinaz.com/tag_jiaoben/shijianzhou.h ...

  5. IO流02_文件过滤器

    [简述] 在File类的list方法中可以接收一个FilenameFilter参数,通过该参数可以列出只满足要求的文件. FilenameFilter接口里包含了一个accept(File dir, ...

  6. (hdu)2444 The Accomodation of Students 判断二分图+最大匹配数

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Problem Description There are a group of s ...

  7. [技术翻译] 构建现代化的Objective-C (下)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3563880.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  8. one makefile file

    #gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic #make clean; make ini ...

  9. m2e插件的新下载地址

    今天在按照<Maven实战>这本书给eclipse配置maven的m2eclipse插件的时候发现,书中写的老的下载地址http://m2eclipse.sonatype.org/site ...

  10. 安装IntelliJ IDEA热部署tomcat插件JreBel

    最近试着使用IntelliJ IDEA这款IDE,网上说它是最好用的java开发工具~但奈何国内ecilpse市场占有率实在稳固,所以国内这个工具也就少数人在使用 当然使用起来跟ecilpse还是有很 ...