【玩转cocos2d-x之十六】滚动字幕和公告

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12991977


滚动字幕和公告是游戏中经常使用到的元素,本文大致写一下实现方法,至于例子中具体的坐标值,请不要纠结。。。这和美工关系还是蛮大的。我PS技术太搓了。。。


1.原理

其实它们的实现都是简单的通过调用update来更新位置达到的移动效果,和背景滚动有点类似,一旦滚动结束就重置为起点,开始新的滚动。只是为了达到在某个区域内滚动而不至于超出这个区域,有时候会用一些前景图来做遮盖,所以这个时候其实字幕或者公告是有在后面滚动的,但是被遮住了,因此看起来就像是只在某个区域内滚动。以垂直字幕滚动为例说明,如下图。



2.实现

不要纠结以下各精灵坐标位置:)

  1. boolCTestLayer::init()
  2. {
  3. boolbRet=false;
  4. do
  5. {
  6. CC_BREAK_IF(!CCLayer::init());
  7. CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize();
  8. CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui_serverlist.plist");
  9. //垂直滚动字幕
  10. CCSprite*listbase=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("login_listbase.png"));//bottom底图
  11. listbase->setPosition(ccp(visibleSize.width/2,visibleSize.height/2+10));
  12. this->addChild(listbase);
  13. text1=CCLabelTTF::create("1.Hi!WelcometoJackyStudio,\nMyBlogis\nblog.csdn.net/jackystudio!\n2.Hi!WelcometoJackyStudio,\nMyBlogis\nblog.csdn.net/jackystudio!\n3.Hi!WelcometoJackyStudio,\nMyBlogis\nblog.csdn.net/jackystudio!\n4.Hi!WelcometoJackyStudio,\nMyBlogis\nblog.csdn.net/jackystudio!","Arial",12);//middle文本
  14. text1->setHorizontalAlignment(kCCTextAlignmentLeft);//左对齐
  15. text1->setAnchorPoint(ccp(0.5,1));
  16. text1->setPosition(ccp(visibleSize.width/2,visibleSize.height/2-55));
  17. this->addChild(text1);
  18. CCSprite*fg=CCSprite::create("fg.png");//top前景
  19. fg->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  20. this->addChild(fg);
  21. //水平滚动公告
  22. CCSprite*textbase=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("login_textbase.png"));
  23. textbase->setPosition(ccp(visibleSize.width/2,50));
  24. textbase->setScaleX(2.5f);
  25. this->addChild(textbase);
  26. text2=CCLabelTTF::create("Hi!WelcometoJackyStudio,MyBlogisblog.csdn.net/jackystudio!","Arial",12);
  27. text2->setPosition(ccp(visibleSize.width+text2->getContentSize().width/2,50));
  28. text2->setColor(ccc3(255,0,0));//红色字体
  29. this->addChild(text2);
  30. this->scheduleUpdate();//执行更新
  31. bRet=true;
  32. }while(0);
  33. returnbRet;
  34. }
  35. voidCTestLayer::update(floatdelta)
  36. {
  37. CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize();
  38. intnewY=text1->getPositionY()+1;
  39. if(newY==500)//如果滚动到这个位置,重置
  40. {
  41. newY=visibleSize.height/2-55;
  42. }
  43. text1->setPositionY(newY);
  44. intnewX=text2->getPositionX()-1;
  45. if(newX<=-text2->getContentSize().width/2)//如果滚动到这个位置,重置
  46. {
  47. newX=visibleSize.width+text2->getContentSize().width/2;
  48. }
  49. text2->setPositionX(newX);
  50. }


3.效果

这个效果有点小bug,就是文字覆盖到边框上了,这是因为没有把边框做在top层上导致的,实际使用注意这个问题即可。




4.源码下载

http://download.csdn.net/detail/jackyvincefu/6434549

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值