[cocos2d-x]公告栏的实现-文字左右移动

来源:未知 责任编辑:责任编辑 发表时间:2013-11-26 22:13 点击:
公告栏用的是node节点,锚点位置是(0,0),文字信息使用CCLabelTTF保存,锚点位置是(0,0),使用的时候将它加入到node里面就好了 p> 

p>文字移动的思路是:每次都update公告的CCLabelTTF的坐标,为了让它从右往左进行移动,右边栏出来,左边栏消失,需要设置一下CCLabelTTF的可显示区域,CCLabelTTF::setTextureRect函数正是设置Label的可显示区域,因此左右边界需要特殊处理,解决方法:

p> 

p> 
// TODO:初始化公告栏  
void InitAnnounceMsg();  
void UpdateTopAnnounce(float dt);  
  
CCRect m_informRect;  
CCLabelTTF *m_inform;   // 公告栏文本  
float m_informScrollX;  
  
// TODO:公告栏  
void CMainMenu::InitAnnounceMsg()  
{  
    string strInform;  
    Struct_Sysnotice notice;  
    CTableCache<Struct_Sysnotice> *table = sDBMgr->GetTable<Struct_Sysnotice>();  
  
    for (int i=1; i<=table->GetNumRows(); ++i)  
    {  
        if (table->GetEntry(i, ¬ice))  
        {  
            strInform += notice.m_noticecontent;  
            strInform += "                   ";  
        }  
    }  
    CCSize size = m_nodes["node_inform"]->getContentSize();  
    m_inform = CCLabelTTF::create(strInform.c_str(), "Arial", 24);  
    m_inform->setAnchorPoint(ccp(0, 0));  
    m_inform->setPosition(CCSize(size.width, 0));  
  
    m_informScrollX = size.width;  
    m_informRect = m_inform->getTextureRect();  
    m_nodes["node_inform"]->addChild(m_inform);  
    this->schedule(schedule_selector(CMainMenu::UpdateTopAnnounce), 0.01f);  
}  
  
void CMainMenu::UpdateTopAnnounce(float dt)  
{  
    CCPoint pt = m_nodes["node_inform"]->getPosition();  
    CCSize size = m_nodes["node_inform"]->getContentSize();  
      
    // 文字X轴的左边界  
    m_informScrollX -= 1.0f;  
    if (m_informScrollX < -m_informRect.size.width)  
    {  
        m_informScrollX = size.width;  
        m_inform->setTextureRect(CCRectMake(0, 0, m_informRect.size.width, size.height));  
    }  
      
    // 文字从右边出来  
    int expose = size.width-m_informScrollX;  
    if (expose < m_informRect.size.width)  
    {   // 文字部分未全部显示出来  
        m_inform->setTextureRect(CCRectMake(0, 0, expose, size.height));  
    }  
    else  
    {   // 文字部分已经从右边全部显示出来  
        m_inform->setTextureRect(CCRectMake(0, 0, m_informRect.size.width, size.height));  
    }  
      
    // 文字从左边消失  
    if (m_informScrollX <= 0)  
    {  
        float offset = fabs(m_informScrollX);  
        m_inform->setTextureRect(CCRectMake(offset, 0, m_inform->getTextureRect().size.width-offset, size.height));  
        return ;  
    }  
  
    m_inform->setPosition(CCSize(m_informScrollX, 0));  
}  

 

p> 

p> 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1