cococs2dx的CCLabel类的数字变化动作

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

//注意 demo中支持的是CCLabelTTF ,把dynamic_cast相应的代码改成如下即可支持多种CCLabel对象

CCLabelProtocol *pLabel = dynamic_cast<CCLabelProtocol*>(m_pTarget); 

demo下载地址:http://pan.baidu.com/s/1c09r3jU 环境:cocos2dx 2.14, xcode 5.0.2

版权木有,欢迎转载与各种使用修改~

源代码:

//头文件 CCLabelChange.h

//  CCLabelChange.h

#ifndef __testLabelChange__CCLabelChange__
#define __testLabelChange__CCLabelChange__ #include "cocos2d.h"
USING_NS_CC; class CCLabelChange : public CCActionInterval
{
public:
CCLabelChange(); public:
/** creates the action */
static CCLabelChange* create(float duration, int fromNum, int toNum); /** initializes the action */
bool initWithDuration(float duration, int fromNum, int toNum); virtual CCObject* copyWithZone(CCZone* pZone);
virtual void startWithTarget(CCNode *pTarget);
virtual CCActionInterval* reverse(void);
virtual void update(float time); protected: int m_nFromNum;
int m_nToNum;
};

//cpp文件 CCLabelChange.cpp

#include "CCLabelChange.h"

CCLabelChange::CCLabelChange():
m_nFromNum(),
m_nToNum()
{ } CCLabelChange* CCLabelChange::create(float duration, int fromNum, int toNum)
{
CCLabelChange *pRet = new CCLabelChange();
pRet->initWithDuration(duration, fromNum, toNum);
pRet->autorelease(); return pRet;
} bool CCLabelChange::initWithDuration(float duration, int fromNum, int toNum)
{
if (CCActionInterval::initWithDuration(duration))
{
m_nFromNum = fromNum;
m_nToNum = toNum;
return true;
} return false;
} CCObject* CCLabelChange::copyWithZone(CCZone *pZone)
{
CCZone* pNewZone = NULL;
CCLabelChange* pCopy = NULL;
if(pZone && pZone->m_pCopyObject)
{
//in case of being called at sub class
pCopy = (CCLabelChange*)(pZone->m_pCopyObject);
}
else
{
pCopy = new CCLabelChange();
pZone = pNewZone = new CCZone(pCopy);
} CCActionInterval::copyWithZone(pZone); pCopy->initWithDuration(m_fDuration, m_nFromNum, m_nToNum); CC_SAFE_DELETE(pNewZone);
return pCopy;
} void CCLabelChange::startWithTarget(CCNode *pTarget)
{
CCActionInterval::startWithTarget(pTarget); CCLabelProtocol *pLabel = dynamic_cast<CCLabelProtocol*>(m_pTarget);
if (pLabel)
{
CCString *numStr = CCString::createWithFormat("%i", m_nFromNum);
pLabel->setString(numStr->getCString());
} } CCActionInterval* CCLabelChange::reverse(void)
{
return CCLabelChange::create(m_fDuration, m_nToNum, m_nFromNum);
} void CCLabelChange::update(float t)
{ CCLabelProtocol *pLabel = dynamic_cast<CCLabelProtocol*>(m_pTarget);
if (pLabel)
{
int num = m_nFromNum + (m_nToNum - m_nFromNum) * t;
CCString *numStr = CCString::createWithFormat("%i", num);
pLabel->setString(numStr->getCString());
} }

//使用方法

        CCLabelTTF *label = CCLabelTTF::create("", "Arial", );

        float duration = 5.0f;
int fromNum = ; //开始数字
int toNum = ; //结束数字 CCLabelChange *pChange = CCLabelChange::create(duration, fromNum, toNum); label->runAction(pChange);

[cocos2dx动作]CCLabel类数字变化动作的更多相关文章

  1. [Quick-x lua]CCLabel类数字变化动作

    之前写了个C++版本的,现在改成lua的, 两者原理是一样,但是动作的执行方式有些微区别 (因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方 ...

  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. 【Cocos2d-X开发学习笔记】第19期:动作管理类(CCActionManager)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.动作管理类 动作管理类CCActionMan ...

  5. cocos2d-X学习之主要类介绍:动作:CCAction

    引用自:http://www.cnblogs.com/lhming/archive/2012/07/01/2572238.html 类继承图: 主要函数: virtual CCObject *  co ...

  6. cocos2d-x 详解之 CCAction(动作)

    关于动作部分,总的来说使用起来比较简单,创建一个动作,然后让可渲染节点如精灵去执行这个动作即可.cocos2dx提供了很多类型的动作,使用起来也很方便.本节重点介绍动作CCAction的子类之一时间动 ...

  7. Cocos2d-x手机游戏开发中-组合动作

    动作往往不是单一,而是复杂的组合.我们可以按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作.组合动作包括以下几类:顺序.并列.有限次数重复.无限次数重复.反动作和动画.动画我们会在下一节介 ...

  8. Learning Cocos2d-x for WP8(8)——动作Action

    原文:Learning Cocos2d-x for WP8(8)--动作Action 游戏很大程度上是由动作画面支撑起来的. 动作分为两大类:瞬间动作和延时动作. 瞬间动作基本等同于设置节点的属性,延 ...

  9. 动作基类 CCAction

    CCAction动作基类关系 class CC_DLL CCAction : public CCObject { public: CCAction(void); virtual ~CCAction(v ...

随机推荐

  1. Java用DOM操作xml

    JAXP DOM方式解析XML文档实例增删改查package jiexi; import javax.xml.parsers.DocumentBuilder; import javax.xml.par ...

  2. 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析

    在跑Monkey测试的时候出现了一个比较特别的问题,先来看看Log: // CRASH: com.meizu.media.painter (pid 12491) // Short Msg: java. ...

  3. Highcharts在IE中不能一次性正常显示的一种解决办法

    由于客户要求必须在IE浏览器下兼容图表,故选用了兼容性较好的Highcharts.另外说一句,博主尝试过ichartjs.ECharts.YUI,兼容性都没有Highcharts给力(所有的兼容性问题 ...

  4. MVC3中使用AuthorizeAttribute特性来完成登陆权限的验证

    以前判断用户是否登录,判断用户Session是否为空,一般会在这个页面写使用: if (HttpContext.Session.IsNewSession) { //todo Login } 每个需要验 ...

  5. onActivityResult不被执行的问题。

    1.首先,返回的Activity必须使用startActivityForResult启动. 2.其次,在返回的Activity中必须保证setResult方法在finish方法之前执行,否则onAct ...

  6. Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. Visual C++ 打印编程技术-编程基础-获取打印机

    标准方法是用: EnumPrinters() 函数获取 #define PRINTER_ENUM_DEFAULT 0x00000001 #define PRINTER_ENUM_LOCAL 0x000 ...

  8. swift-03-数据类型转换

    //  main.swift //  05-数据类型的转换 // //  Created by wanghy on 15/8/9. //  Copyright (c) 2015年 wanghy. Al ...

  9. cyark - 数字方舟(看侣行第三季时发现的)

    数字方舟 Ben Kacyra

  10. 网站开发常用jQuery插件总结(13)定位插件scrollto

    一.scrollto插件功能 scrollto用于定位页面中元素的位置,并使滚动条滚动到当前元素. 二.scrollto官方地址 https://github.com/flesler/jquery.s ...