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);

效果如图:

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

闹里有钱,静处安身。

Cocos2dx实现数字跳动效果

相关文章:

你感兴趣的文章:

标签云: