cocos2dx学习笔记(简单的滚动数字表盘)

x简单的滚动数字表盘

首先在头文件中:

#include 
#include "cocos2d.h"
USING_NS_CC;
class NumberScroll:public CCNode
{
//    可见的节点数字
    CCNode *visibleNode;
public:
//    函数初始化
    virtual bool init();
//    重载CCNode函数实现opengl遮罩
    virtual void visit();
 CREATE_FUNC(NumberScroll);
//    设置滚动到哪个数字
    void setNumber(int var);
};
滚动数字表盘的实现:
#include "Number.h"
bool NumberScroll::init()
{
    if ( !CCNode::init() )
    {
        return false;
    }
    visibleNode=CCNode::create();
//    创建0-9的数字
    for(int i=0;i<10;i++){
        char str[2];
        str[0] = '0' + i;
        str[1] = '\0';
   CCLabelTTF* single = CCLabelTTF::create(str, "", 27);
   single->setTag(i);
   single->setAnchorPoint(ccp(0, 0));
   single->setPosition(ccp(0, 27 * i));
//     将数字加入visibleNode节点中
   visibleNode->addChild(single);
  }
    this->addChild(visibleNode);
     return true;
    
}
void NumberScroll::visit() {
//    启动遮罩效果
     glEnable(GL_SCISSOR_TEST);
     CCPoint pos = CCPointZero;
//    获取visibleNode节点屏幕绝对位置
     pos = visibleNode->getParent()->convertToWorldSpace(pos);
     CCRect rect = CCRectMake(pos.x, pos.y, 27, 27);
//    设置遮罩效果
     glScissor(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
     CCNode::visit();
//    关闭遮罩效果
     glDisable(GL_SCISSOR_TEST);
}
void NumberScroll::setNumber(int var)
{
//    停止本节点的所有动作
     this->stopAllActions();
//    移动到到节点坐标
     CCPoint moveToPosition = ccp(visibleNode->getPosition().x,-var*27);
//    创建动作移动到该节点
     CCMoveTo* moveAction = CCMoveTo::create(var *1.0, moveToPosition);
//    运行该动作
     visibleNode->runAction(moveAction);
}
在场景中:
    //获取可视区域大小
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    //获取可视区域左下角坐标
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
//    创建滚动数字表盘节点
    NumberScroll *scroll=NumberScroll::create();
// 设置坐标
    scroll->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y+200));
//    添加节点到场景中
    this->addChild(scroll);
//    设置滚动到数字2
    scroll->setNumber(2);


你可能感兴趣的:(cocos2dx学习笔记(简单的滚动数字表盘))