cocos2dx ccscrollview 实现翻页效果

这篇文章中,我们简单讲下CCScrollview,顾名思义,Scrollview,滚动视图,无论在android,ios,黑莓上都有这个滚动视图。那我们来看下cocos2dx中的CCScrollview,我这个版本的cocos2dx是2.0.4版本的,貌似前几个版本都有点不一样。OK,下面我直接上代码:

在头文件中.h:

[cpp]  view plain copy
  1. class HelloWorld : public cocos2d::CCLayer, public cocos2d::extension::CCScrollViewDelegate  
  2. {  
  3. public:  
  4.     // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)  
  5.     virtual bool init();  
  6.   
  7.     // there's no 'id' in cpp, so we recommend to return the class instance pointer  
  8.     static cocos2d::CCScene* scene();  
  9.       
  10.     // a selector callback  
  11.     void menuCloseCallback(CCObject* pSender);  
  12.   
  13.     // preprocessor macro for "static create()" constructor ( node() deprecated )  
  14.     CREATE_FUNC(HelloWorld);  
  15.       
  16.       
  17. public:  
  18.       
  19.     void scrollViewDidScroll(cocos2d::extension::CCScrollView *view);  
  20.       
  21.     void scrollViewDidZoom(cocos2d::extension::CCScrollView *view);  
  22.   
  23. private:  
  24.   
  25.   
  26.     cocos2d::extension::CCScrollView *showScrollView;  
  27.       
  28.     int curPage;  
  29.   
  30.       
  31. };  

稍微解释下,首页继承CCScrollViewDelegate这个类,里面有两个纯虚函数,重写这两个方法,一个是滚动的,一个是缩放的,定义一个ccscrollview这样一个对象。

看下.cpp:

[cpp]  view plain copy
  1. bool HelloWorld::init()  
  2. {  
  3.     //  
  4.     // 1. super init first  
  5.     if ( !CCLayer::init() )  
  6.     {  
  7.         return false;  
  8.     }  
  9.   
  10.     //获取窗口大小  
  11.     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
  12.     CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();  
  13.       
  14.     //创建一个层  
  15.     CCLayer *slayer=CCLayer::create();  
  16.       
  17.     for (int i=1; i<5; i++) {  
  18.         //背景  
  19.         CCSprite *bgsprite = CCSprite::create("deskBG@2x.png");  
  20.         bgsprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));  
  21.         slayer->addChild(bgsprite,1);  
  22.   
  23.         CCString *nameString=CCString::createWithFormat("sprite%d@2x.png",i);  
  24.           
  25.         CCSprite *sprite = CCSprite::create(nameString->getCString());  
  26.         sprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));  
  27.         slayer->addChild(sprite,1);  
  28.       
  29.       
  30.     }  
  31.       
  32.          
  33.       
  34.     showScrollView = CCScrollView::create(CCSizeMake(visibleSize.width, visibleSize.height), slayer);  
  35.     showScrollView->setContentOffset(CCPointZero);  
  36.     //false自己写touch事件  
  37.     showScrollView->setTouchEnabled(true);  
  38.     showScrollView->setDelegate(this);  
  39.   
  40.     //滚动方向  
  41.     showScrollView->setDirection(kCCScrollViewDirectionHorizontal);  
  42.   
  43.     showScrollView->setBounceable(true);  
  44.   //  slayer->setContentSize(CCSizeMake(visibleSize.width*3, visibleSize.height));  
  45.     showScrollView->setContentSize(CCSizeMake(visibleSize.width*4, visibleSize.height));  
  46.       
  47.     this->addChild(showScrollView,1);  
  48.   
  49.     //创建pagecontrol  
  50.     for (int i=1; i<5; i++) {  
  51.                   
  52.         CCSprite *pageControlSprite=CCSprite::create("regitChoose@2x.png");  
  53.           
  54.         pageControlSprite->setPosition(ccp( origin.x + (visibleSize.width - 4 * pageControlSprite->getContentSize().width)/2 + pageControlSprite->getContentSize().width * (i-1), origin.y + 30));  
  55.           
  56.         pageControlSprite->setTag(100+i);  
  57.           
  58.         this->addChild(pageControlSprite, 1);  
  59.           
  60.     }  
  61.       
  62.     //默认是第一页选中  
  63.     CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(101);  
  64.       
  65.     //换贴图  
  66.     CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("regitUnchoose@2x.png");  
  67.       
  68.     selectedSrite->setTexture(aTexture);  
  69.   
  70.       
  71.       
  72.     curPage=1;  
  73.       
  74.     //触摸分发  
  75.   //  CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, false);  
  76.       
  77.       
  78.     return true;  
  79. }  

回调函数:

[cpp]  view plain copy
  1. void HelloWorld::scrollViewDidScroll(CCScrollView *view)  
  2. {  
  3.   
  4.      CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
  5.       
  6.      curPage=(int)fabsf(showScrollView->getContentOffset().x/visibleSize.width)+1;  
  7.       
  8.   
  9.      for (int i=1; i<5; i++) {  
  10.           
  11.         if (curPage==i) {  
  12.               
  13.               
  14.             CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+curPage);  
  15.               
  16.             CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("regitUnchoose@2x.png");  
  17.               
  18.             selectedSrite->setTexture(aTexture);  
  19.               
  20.         }  
  21.         else  
  22.         {  
  23.           
  24.           
  25.             CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+i);  
  26.               
  27.             CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("regitChoose@2x.png");  
  28.               
  29.             selectedSrite->setTexture(aTexture);  
  30.   
  31.           
  32.           
  33.         }  
  34.           
  35.           
  36.           
  37.           
  38.     }  
  39.       
  40.       
  41.       
  42.   //  CCLOG("%d",curPage);  
  43.       
  44.       
  45.       
  46.   
  47.   
  48. }  
  49.   
  50.   
  51. void HelloWorld::scrollViewDidZoom(CCScrollView *view)  
  52. {  
  53.   
  54.   
  55.   
  56.   
  57.       
  58.   
  59.   
  60.   
  61. }  

OK,就这么简单,貌似ccscrollview没有按一页一页那样的滑动,哪个童鞋知道的可以告诉我。。。O(∩_∩)O,看效果:







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SZ_Eason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值