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

转载:http://blog.csdn.net/qq_17749439/article/details/37925051

简单的滚动数字表盘

首先在头文件中:

[cpp]  view plain copy
  1. #include   
  2. #include "cocos2d.h"  
  3. USING_NS_CC;  
  4. class NumberScroll:public CCNode  
  5. {  
  6. //    可见的节点数字  
  7.     CCNode *visibleNode;  
  8. public:  
  9. //    函数初始化  
  10.     virtual bool init();  
  11. //    重载CCNode函数实现opengl遮罩  
  12.     virtual void visit();  
  13.  CREATE_FUNC(NumberScroll);  
  14. //    设置滚动到哪个数字  
  15.     void setNumber(int var);  
  16. };  
滚动数字表盘的实现:
[cpp]  view plain copy
  1. #include "Number.h"  
  2. bool NumberScroll::init()  
  3. {  
  4.     if ( !CCNode::init() )  
  5.     {  
  6.         return false;  
  7.     }  
  8.     visibleNode=CCNode::create();  
  9. //    创建0-9的数字  
  10.     for(int i=0;i<10;i++){  
  11.         char str[2];  
  12.         str[0] = '0' + i;  
  13.         str[1] = '\0';  
  14.    CCLabelTTF* single = CCLabelTTF::create(str, "", 27);  
  15.    single->setTag(i);  
  16.    single->setAnchorPoint(ccp(0, 0));  
  17.    single->setPosition(ccp(0, 27 * i));  
  18. //     将数字加入visibleNode节点中  
  19.    visibleNode->addChild(single);  
  20.   }  
  21.     this->addChild(visibleNode);  
  22.      return true;  
  23.       
  24. }  
  25. void NumberScroll::visit() {  
  26. //    启动遮罩效果  
  27.      glEnable(GL_SCISSOR_TEST);  
  28.      CCPoint pos = CCPointZero;  
  29. //    获取visibleNode节点屏幕绝对位置  
  30.      pos = visibleNode->getParent()->convertToWorldSpace(pos);  
  31.      CCRect rect = CCRectMake(pos.x, pos.y, 27, 27);  
  32. //    设置遮罩效果  
  33.      glScissor(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);  
  34.      CCNode::visit();  
  35. //    关闭遮罩效果  
  36.      glDisable(GL_SCISSOR_TEST);  
  37. }  
  38. void NumberScroll::setNumber(int var)  
  39. {  
  40. //    停止本节点的所有动作  
  41.      this->stopAllActions();  
  42. //    移动到到节点坐标  
  43.      CCPoint moveToPosition = ccp(visibleNode->getPosition().x,-var*27);  
  44. //    创建动作移动到该节点  
  45.      CCMoveTo* moveAction = CCMoveTo::create(var *1.0, moveToPosition);  
  46. //    运行该动作  
  47.      visibleNode->runAction(moveAction);  
  48. }  
在场景中:
[cpp]  view plain copy
  1.     //获取可视区域大小  
  2.     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
  3.     //获取可视区域左下角坐标  
  4.     CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();  
  5. //    创建滚动数字表盘节点  
  6.     NumberScroll *scroll=NumberScroll::create();  
  7. // 设置坐标  
  8.     scroll->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y+200));  
  9. //    添加节点到场景中  
  10.     this->addChild(scroll);  
  11. //    设置滚动到数字2  
  12.     scroll->setNumber(2);  


你可能感兴趣的:(cocos2dx,cpp,游戏)