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

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

        分类:            cocos2d-x 790人阅读 评论(0) 收藏 举报
cocos2d-x 滚动字幕 滚动公告 update

目录(?)[+]

  1. 原理
  2. 实现
  3. 效果
  4. 源码下载

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


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


1.原理

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



2.实现

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

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


3.效果

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

       

玩转cocos2d-x之十六】滚动字幕和公告_第1张图片

4.源码下载

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

你可能感兴趣的:(cocos2d-x)