cocos2d-x滚动字幕
2015年01月28日 09:32
0 点赞
0 评论
更新于 2025-11-21 15:36
在cocos2d-x中,滚动字幕的实现可以通过代码来完成。如果您目前还不了解如何实现,那么可以通过本文来学习。
下面是封装好的 TestLayer 类代码,您可以直接调用:
bool TestLayer::init()
{
// 获取可见窗口的大小
CCSize size = CCDirector::sharedDirector()->getVisibleSize();
// 创建要显示的文字
text = CCLabelTTF::create("text\nbaibai\nfdffdd\nzimu\nhaha\njahjahjkd\njhahaj\n", "", 30);
text->setPosition(ccp(100, -120));
// 绘制裁剪区域
CCDrawNode* shap = CCDrawNode::create();
CCPoint point[4] = {ccp(0, 0), ccp(200, 0), ccp(200, 200), ccp(0, 200)};
// 绘制多边形,这里原代码颜色值有误,RGBA颜色值范围是0-255,将第一个参数修正为255
shap->drawPolygon(point, 4, ccc4f(255, 255, 255, 255), 2, ccc4f(255, 255, 255, 255));
CCClippingNode* cliper = CCClippingNode::create();
cliper->setStencil(shap);
cliper->setAnchorPoint(ccp(0.5, 0.5));
cliper->setPosition(ccp(100, 20));
this->addChild(cliper);
// 把要滚动的文字加入到裁剪区域
cliper->addChild(text);
// 文字滚动,超出范围后重新开始
this->schedule(schedule_selector(TestLayer::rollText));
return true;
}
void TestLayer::rollText(float dt)
{
text->getPositionY() > 300 ? text->setPositionY(-150) : text->setPositionY(text->getPositionY() + 2);
}
代码解释
- 获取可见窗口大小:通过
CCDirector::sharedDirector()->getVisibleSize()获取当前可见窗口的大小,不过在这段代码中该变量size未被使用。 - 创建文字标签:使用
CCLabelTTF::create方法创建一个文字标签,并设置其初始位置。 - 绘制裁剪区域:
- 使用
CCDrawNode绘制一个多边形作为裁剪区域的模板。 - 创建
CCClippingNode并将绘制的多边形设置为其模板。 - 设置裁剪节点的锚点和位置,并将其添加到当前层。
- 使用
- 添加文字到裁剪区域:将创建的文字标签添加到裁剪节点中。
- 安排滚动调度:使用
schedule方法安排一个定时任务,每隔一定时间调用rollText方法来实现文字滚动。 - 文字滚动逻辑:在
rollText方法中,判断文字的y坐标是否超出了指定范围(这里是300),如果超出则将其y坐标重置为-150,否则将y坐标增加2,实现文字向上滚动的效果。
通过以上步骤,就可以在cocos2d-x中实现一个简单的滚动字幕效果。