Cocos2dx实现数字跳动效果

 更新时间:2020年09月18日 11:03:16   作者:auccy  
这篇文章主要为大家详细介绍了Cocos2dx实现数字跳动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Cocos2dx实现数字跳动效果的具体代码,供大家参考,具体内容如下

封装的类如下:

.h文件

class DigitalBeatText:public cocos2d::Node
{
public:
 DigitalBeatText();
 ~DigitalBeatText();
 static DigitalBeatText *create(int value);
 
 void setValue(int newValue);
protected:
 bool init(int value);
 
 void setValueNoAction(int newValue);
 void startRoll();
 void stopRoll();
 
 void onTimeHandler(float dt);
protected:
 cocos2d::ui::Text * m_txt;
 int  m_lastValue;
 int  m_newValue;
 int  m_valueGap;  //数字跳动间隔
 float    m_scheduleInterval;//调度器间隔
 bool    m_isReverse;  // true: 从大到小
};

.cpp文件:

DigitalBeatText::DigitalBeatText() 
:m_txt(nullptr)
, m_lastValue(0)
, m_newValue(0)
, m_valueGap(0)
, m_scheduleInterval(1.0f/60.f)
, m_isReverse(false)
{
 
}
 
DigitalBeatText::~DigitalBeatText()
{
}
 
DigitalBeatText* DigitalBeatText::create(int value)
{
 auto pRet = new DigitalBeatText;
 if (pRet->init(value))
 {
  pRet->autorelease();
  return pRet;
 }
 CC_SAFE_DELETE(pRet);
 return nullptr;
}
 
bool DigitalBeatText::init(int value)
{
 if (!Node::init()){
  return false;
 }
 char buff[16] = { 0 };
 m_txt = ui::Text::create();
 m_txt->setFontSize(36);
 sprintf(buff, "%d", value);
 m_txt->setString(buff);
 this->addChild(m_txt);
 return true;
}
 
void DigitalBeatText::setValue(int newValue)
{
 m_isReverse = newValue < m_lastValue;
 stopRoll();
 m_newValue = newValue;
 startRoll();
}
 
void DigitalBeatText::setValueNoAction(int newValue)
{
 m_lastValue = newValue;
 m_newValue = newValue;
 m_txt->setString(cocos2d::StringUtils::toString(m_lastValue));
}
 
void DigitalBeatText::startRoll()
{
 int count = m_newValue - m_lastValue;
 if (count>0){
  m_valueGap = ceil(count / (1.0 / m_scheduleInterval));
 }else{
  m_valueGap = floor(count / (1.0 / m_scheduleInterval));
 }
 schedule(CC_SCHEDULE_SELECTOR(DigitalBeatText::onTimeHandler), m_scheduleInterval);
}
 
void DigitalBeatText::stopRoll()
{
 unschedule(CC_SCHEDULE_SELECTOR(DigitalBeatText::onTimeHandler));
}
 
void DigitalBeatText::onTimeHandler(float dt)
{
 m_lastValue += m_valueGap;
 bool stop = false;
 if (!m_isReverse)
 {
  if (m_lastValue >= m_newValue){
   m_lastValue = m_newValue;
   stop = true;
  }
 }
 else{
  if (m_lastValue <= m_newValue){
   m_lastValue = m_newValue;
   stop = true;
  }
 }
 m_txt->setString(cocos2d::StringUtils::toString(m_lastValue));
 if (stop){
  this->stopRoll();
 }
}

使用示例:

m_index = 1;
m_beatT = DigitalBeatText::create(m_index);
m_beatT->setPosition(visibleSize*0.5);
 this->addChild(m_beatT);
 
m_index += RandomHelper::random_int(0, 100) - 50;
m_beatT->setValue(m_index);

效果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++用一棵红黑树同时封装出set与map的实现代码

    C++用一棵红黑树同时封装出set与map的实现代码

    set中存储的一般为键K即可,而map存储的一般都是键值对KV,也就是说他们结构是不同的,那么我们如何才能用一颗红黑树同时封装出set与map两种容器呢,那么接下来我们具体地来研究下STL库中是怎样实现的,并且进行模拟实现,需要的朋友可以参考下
    2024-03-03
  • C++获取项目路径的两种方式详解

    C++获取项目路径的两种方式详解

    这篇文章主要介绍了C++获取项目路径的两种方式的相关资料,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • 浅析VC++中的头文件包含问题

    浅析VC++中的头文件包含问题

    类中尽量采用指针或引用方式调用其它类,这样就可以只声明class xxx了。并且这也符合资源最优利用,更利于使用多态
    2013-09-09
  • C++在vscode中的多文件编程问题解读

    C++在vscode中的多文件编程问题解读

    这篇文章主要介绍了C++在vscode中的多文件编程问题解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • OpenCV实现简单录屏功能

    OpenCV实现简单录屏功能

    这篇文章主要为大家详细介绍了OpenCV实现简单录屏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言多文件编程问题解析

    C语言多文件编程问题解析

    在某些场景中,考虑到编译效率和可移植性,#pragma once 和 #ifndef 经常被结合使用来避免头文件被 重复引入,这里介绍用 _Pragma 操作符避免头文件重复引入的问题,感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • C++ Primer学习记录之变量

    C++ Primer学习记录之变量

    这篇文章主要为大家介绍了C++Primer之变量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • c++中将二维数组元素变换为逆向存放的实现代码

    c++中将二维数组元素变换为逆向存放的实现代码

    编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推
    2020-11-11
  • C语言数组任意位置插入一个元素方法

    C语言数组任意位置插入一个元素方法

    这篇文章主要给大家分享C语言数组任意位置插入一个元素方法,
    2021-11-11
  • 常用的C++标准库头文件小结

    常用的C++标准库头文件小结

    C++标准库定义了一系列函数、宏和对象,以实现跨团队、跨平台的高效且具有卓越性能的标准化 C++ 代码, 本文介绍常用的C++标准库头文件,需要的朋友可以参考下
    2023-11-11

最新评论