滚动字幕是什么意思,看看下面的图你就明白了。当然我们这个是水平方向的滚动,也可以是竖直方向的滚动。我来说一下实现的原理,字幕当然就是文本信息了,我们设置好了文本的位置,然后不断改变它的坐标,这样的话就滚动起来了。当超出屏幕的时候需要判断一下然后重新设置一下坐标位置。下面看看代码中是具体怎么做的吧!

cocos2d-x滚动字幕的实现

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	//添加背景图片
	CCSprite * background = CCSprite::create("background.png");
	background->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
	this->addChild(background,1);

	//设置文本信息
	CCLabelTTF * text = CCLabelTTF::create("welcome to www.zaojiahua.com ! please pay attention to my blog!",
		"",22);
	text->setColor(ccc3(0,255,255));
	text->setPosition(ccp(visibleSize.width/2,visibleSize.height*4/5));
	this->addChild(text,1,0);

	//调用周期性的函数来改变text的坐标,产生移动的效果
	this->schedule(schedule_selector(HelloWorld::scroll),0.01f);

    return true;
}

void HelloWorld::scroll(float tm)
{
	CCLabelTTF * text = (CCLabelTTF *)this->getChildByTag(0);
	//可以采用如下的俩种方法改变text的位置
	/*CCMoveBy * move = CCMoveBy::create(0.01f,ccp(-2,0));
	text->runAction(move);*/
	CCPoint point = text->getPosition();
	text->setPosition(ccp(point.x-1,point.y));

	//当text完全出去的时候重新设置它的坐标
	float width = text->getContentSize().width;
	if(point.x < -width/2)
	{
		text->setPosition(ccp(this->visibleSize.width+width/2,visibleSize.height*4/5));
	}
}

至于如何实现竖直方向的滚动字幕这个也很简单,只不过你是需要几张图片了,在我看来至少是俩张吧,一张图片的zOrder设置的大一点,这个是展示给用户的,同时显示字幕的部分需要掏空,就是设置成透明的,然后另一张图片zOrder小一些,放到下面,它的上边放的就是文本信息,我们就是在下层这个节点上移动文本的位置,然后判断它的坐标改变它的坐标。如果想做的好看些可以在最上面的那张图片上再加一些边框图片什么的,由于本人没有美工就只能放弃了。