cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果
来源:互联网 发布:javamail smtp 端口 编辑:程序博客网 时间:2024/04/28 15:21
思路和上一篇(利用裁剪节点生成)一样。现在师范下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;elsesTxt->_mNodes.pushBack(pNow);pNow=va_arg(lst,Node*);}elsebreak;}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", 30, GlyphCollection::DYNAMIC,nullptr,true); return ttfConfig;}},//{FONT_TYPE::SLIM,[](){TTFConfig ttfConfig("fonts/arial.ttf", 30, GlyphCollection::DYNAMIC,nullptr,true); return ttfConfig;}}//};//auto ttf = ttfConfigs[(int)mType].callTTF();////TTFConfig ttf("fonts/HKYuanMini.ttf",30,GlyphCollection::CUSTOM, "应用名称");//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();}
0 0
- cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果
- cocos2dx 3.2下利用裁剪节点实现跑马灯滚动效果
- 利用ScrollView实现跑马灯效果
- 自定义UI控件实现跑马灯效果
- ScrollView实现滚动效果
- ScrollView实现滚动效果
- ScrollView -- 实现滚动效果
- 利用剪裁节点实现跑马灯效果
- cocos2dx ClippingNode实现跑马灯效果和文字效果
- Android下TextView实现跑马灯效果
- js实现上下滚动的跑马灯效果
- android跑马灯效果实现(一直滚动不受影响)
- Textview的文字滚动,跑马灯效果的实现
- ViewGroup实现可以上下、左右滚动跑马灯效果
- 一分钟实现 Android textview 跑马灯文字滚动效果
- 自定义View—实现滚动TextView(跑马灯)效果
- TextView实现滚动字幕的效果【跑马灯】
- TextView实现跑马灯效果(文字滚动)
- 第九周项目三之输出星号图c
- C#-—烟台大学的网址的访问
- SecureCRT的使用方法和技巧(详细使用教程)
- 第十周项目一 程序填充与阅读
- 循环冗余校验(CRC)算法入门引导 读后总结
- cocos2dx 3.2下利用ui::scrollView实现跑马灯滚动效果
- 程序填充与阅读(1)
- Protocol Buffers安装与简单使用
- java线程Thead、java线程池
- 第9周项目6(年龄几何)
- 网络抓包工具Wireshark图解教程(简介、抓包、过滤器)
- Java_Java语言平台
- .NET中的三种接口实现方式
- SDUT 1128-河床(DFS)