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);
}

代码解释

  1. 获取可见窗口大小:通过 CCDirector::sharedDirector()->getVisibleSize() 获取当前可见窗口的大小,不过在这段代码中该变量 size 未被使用。
  2. 创建文字标签:使用 CCLabelTTF::create 方法创建一个文字标签,并设置其初始位置。
  3. 绘制裁剪区域
    • 使用 CCDrawNode 绘制一个多边形作为裁剪区域的模板。
    • 创建 CCClippingNode 并将绘制的多边形设置为其模板。
    • 设置裁剪节点的锚点和位置,并将其添加到当前层。
  4. 添加文字到裁剪区域:将创建的文字标签添加到裁剪节点中。
  5. 安排滚动调度:使用 schedule 方法安排一个定时任务,每隔一定时间调用 rollText 方法来实现文字滚动。
  6. 文字滚动逻辑:在 rollText 方法中,判断文字的 y 坐标是否超出了指定范围(这里是300),如果超出则将其 y 坐标重置为 -150,否则将 y 坐标增加2,实现文字向上滚动的效果。

通过以上步骤,就可以在cocos2d-x中实现一个简单的滚动字幕效果。

作者信息

feifeila

feifeila

共发布了 3994 篇文章