大佬教程收集整理的这篇文章主要介绍了cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
思路和上一篇(利用裁剪节点生成)一样。现在师范下ui::scrollView 实现跑马灯,注:可以是文本跑马灯也可以是其他Node.
那么废话就暂不说了,先上代码
头文件
/**************************************************************************** Copyright (C) 2014-10-11 Real.xm Create by q229827701 http://blog.csdn.net/q229827701 ****************************************************************************/ #pragma once #include "cocos2d.h" #include "ui/UIScrollView.h" class ScrollText:public cocos2d::Node { public: enum class FONT_TYPE { BOLD,NOMAL,SLIM }; public: CREATE_FUNC(ScrollText); /** @pragma pMoveChild 需要移动的Node @pragma otherChid 其他需要显示的Node */ static ScrollText* create(cocos2d::Node* pMoveChild,...); static ScrollText* create(FONT_TYPE mTypE); /** @pragma isScroll 设置是否需要自动滚动 @pragma byWidth 设置是否需要根据长度来滚动 PS:如果按照长度来设置,则长度小于遮罩长度的将不予滚动 */ void setAutoScroll(bool isScroll,bool byWidth=falsE); CC_CONSTRUCTOR_ACCESS: ScrollText(); virtual ~ScrollText(); virtual bool init(); virtual bool initWithDatas(cocos2d::Node* &pMoveChild); virtual bool init(FONT_TYPE mTypE); bool initLable(FONT_TYPE mTypE); bool initScroll(); void update(float delta); virtual void onEnterTransitionDidFinish(); CC_SYNTHESIZE_READONLY(cocos2d::Node*,_mLable,LablE); CC_SYNTHESIZE_READONLY(cocos2d::Size,_mSize,TextSizE); CC_SYNTHESIZE(std::string,_content,Content); public: void setSize(const cocos2d::Size &sizE); private: cocos2d::Vector<Node*> _mNodes; bool _autoScroll; bool _byWidth; cocos2d::ui::ScrollView* _scrollView; };
源文件
#include "ScrollText.h" #include "ui/UIScrollView.h" USING_NS_Cc; #define IF_RETURN(cont,p) if ((cont)){return (p);} #define IF_RETURN_falSE(cont) IF_RETURN(cont,falsE) ScrollText::ScrollText():_autoScroll(false),_byWidth(false),_mLable(nullptr),_content("content"),_scrollView(nullptr),_mSize(120,40) { } ScrollText::~ScrollText() { CC_SAFE_RELEASE(_mLablE); CC_SAFE_RELEASE(_scrollView); } bool ScrollText::init() { IF_RETURN_falSE(!init(FONT_TYPE::NOMAL)); return true; } bool ScrollText::init( FONT_TYPE mType ) { bool ret = false; if (Node::init()) { IF_RETURN_falSE(!initLable(mTypE)); IF_RETURN_falSE(!initScroll()); return true; } return ret; } bool ScrollText::initScroll() { _scrollView = ui::ScrollView::create(); IF_RETURN_falSE(!_scrollView); _scrollView->setContentSize(_mSizE); addChild(_scrollView); this->setContentSize(_scrollView->getContentSize()); for (auto child:_mNodes) { IF_RETURN_falSE(!child); _scrollView->addChild(child); } IF_RETURN_falSE(!_mLablE); _scrollView->addChild(_mLablE); return true; } void ScrollText::update( float delta ) { //log("ScrollText::update"); if (!_mLablE) { return; } float currentX = _mLable->getPositionX(); float contentX = getContentSize().width*(-1.0f); float lableX = _mLable->getContentSize().width*(-1.0f); if(_byWidth) { _autoScroll = _mLable->getContentSize().width>getContentSize().width?true:false; } if (_autoScroll) { if(_mLable->getPositionX()>=lableX) _mLable->setPositionX(_mLable->getPositionX()-1.0f); else { _mLable->setPositionX(-contentX); } } else { _mLable->setPositionX(0); } auto label = dynamic_cast<Label*>(_mLablE); if(label&&label->getString()!=_content) { label->setString(_content); } } void ScrollText::setAutoScroll( bool isScroll,bool byWidth/*=false*/ ) { _byWidth = byWidth; if(isScroll&&byWidth) { _autoScroll = _mLable->getContentSize().width>getContentSize().width?true:false; } else _autoScroll = isScroll; } ScrollText* ScrollText::create(cocos2d::Node* pMoveChild,... ) { auto *sTxt = new ScrollText(); if (sTxt ) { va_list lst; va_start(lst,pMoveChild); Node* pNow; pNow=pMoveChild; bool isFirst = true; while(pMoveChild) { if (nullptr!=pNow) { if(isFirst) isFirst = false; else sTxt->_mNodes.pushBACk(pNow); pNow=va_arg(lst,Node*); } else break; } va_end(lst); if(sTxt->initWithDatas(pMoveChild)) { sTxt->autorelease(); return sTxt; } else { delete sTxt; sTxt = NULL; return NULL; } } else { delete sTxt; sTxt = NULL; return NULL; } } ScrollText* ScrollText::create( FONT_TYPE mType ) { auto text = new ScrollText(); if(text&&text->init(mTypE)) { text->autorelease(); return text; } else { delete text; text = nullptr; return nullptr; } } bool ScrollText::initWithDatas(cocos2d::Node* &pMoveChild) { bool ret = false; if (Node::init()) { IF_RETURN_falSE(!pMoveChild); _mLable = pMoveChild; _mLable->setAnchorPoint(Vec2::ANCHOR_MIDDLE_LEFT); IF_RETURN_falSE(!initScroll()); //scheduleupdate(); return true; } return ret; } void ScrollText::setSize( const cocos2d::Size &size ) { _mSize = size; _scrollView->setContentSize(_mSizE); this->setContentSize(_mSizE); } bool ScrollText::initLable( FONT_TYPE mType ) { //typedef struct //{ // FONT_TYPE font_type; // std::function<TTFConfig()> callTTF; //} TTFModel; //TTFModel ttfConfigs[]={ // {FONT_TYPE::BOLD,[](){ TTFConfig ttfConfig("fonts/HKYuanMini.ttf",30,GlyphCollection::CUSTOM,"应用名称");return ttfConfig;}},// {FONT_TYPE::NOMAL,[](){TTFConfig ttfConfig("fonts/arial.ttf",GlyphCollection::DYNAMIC,nullptr,truE); return ttfConfig;}},// {FONT_TYPE::SLIM,truE); return ttfConfig;}} //}; //auto ttf = ttfConfigs[(int)R_602_11845@Type].callTTF(); ////TTFConfig ttf("fonts/HKYuanMini.ttf","应用名称"); //IF_RETURN_falSE(!&ttf); //_mLable = Label::createWithTTF(ttf,"content",TextHAlignment::LEFT,_mSize.width); _mLable = Label::createWithSystemFont("content","Arial Bold",40); IF_RETURN_falSE(!_mLablE); _mLable->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT); _mLable->retain(); return true; } void ScrollText::onEnterTransitionDidFinish() { scheduleupdate(); }
以上是大佬教程为你收集整理的cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果全部内容,希望文章能够帮你解决cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。