================================================头文件 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);