cocos2dx3.3 跑马灯功能的简单实现

来源:互联网 发布:java从入门到精通 豆瓣 编辑:程序博客网 时间:2024/05/22 19:43


================================================头文件 Marquee.h================================================

#ifndef __H_MARQUEE_H__

#define __H_MARQUEE_H__
#include "cocos2d.h"


class Marquee:public cocos2d::Layer{
public:
Marquee();
~Marquee();
static void show(const char *content, int speed = -3, int fontSize = 30, cocos2d::Color3B color3B = cocos2d::Color3B::WHITE, int y = cocos2d::Director::getInstance()->getVisibleSize().height-10 - 30);
private:
virtual bool init();
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(Marquee);
void update(float dt);
void setSpeed(int dir);
int getSpeed();


private:
int m_speed;


};




#endif





================================================cpp文件 Marquee.cpp================================================

#include "Marquee.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
Marquee::Marquee()
{
m_speed = 0;
}
Marquee::~Marquee()
{
}


bool Marquee::init()
{
if (!Layer::init())
{
return false;
}
this->scheduleUpdate();
return true;
}


void Marquee::show(const char *content, int speed, int fontSize, Color3B color3B, int y)
{
Marquee *marquee = Marquee::create();
auto scene = Director::getInstance()->getRunningScene();
Size visibleSize = Director::getInstance()->getVisibleSize();


Label *label = Label::create(content, "", fontSize);
label->setColor(color3B);
label->setTag(110);
label->setPositionY(y);
if (speed < 0)
{
label->setAnchorPoint(Vec2::ZERO);
label->setPositionX(visibleSize.width);
}
else
{
label->setAnchorPoint(Vec2::ANCHOR_BOTTOM_RIGHT);
label->setPositionX(0);
}
marquee->setSpeed(speed);
marquee->addChild(label);
scene->addChild(marquee);
}


void Marquee::update(float dt)
{
Size visibleSize = Director::getInstance()->getVisibleSize();
Label *label = (Label*)this->getChildByTag(110);
int dirX = this->getSpeed();
int labelWidth = label->getStringLength()*(label->getSystemFontSize() / 2);
label->setPositionX(label->getPositionX() + dirX);
if (dirX < 0)
{
if (label->getPositionX() < -labelWidth)
{
//label->setPositionX(visibleSize.width);
this->removeFromParent();
}
}
else
{
if (label->getPositionX() > labelWidth + visibleSize.width)
{
//label->setPositionX(0);
this->removeFromParent();
}
}



}


void Marquee::setSpeed(int speed)
{
m_speed = speed;
}


int Marquee::getSpeed()
{
return m_speed;
}


void Marquee::onEnter()
{
Layer::onEnter();


}
void Marquee::onExit()
{
Layer::onExit();
}



================================================调用:===============================================

调用方法:

MarqueeEffect::show("Most people... blunder round this cityMost people  blunder round this cityMost people ", 6, 40, Color3B::RED);



0 0
原创粉丝点击