1. 程式人生 > >cocos2dx ccscrollview 實現翻頁效果

cocos2dx ccscrollview 實現翻頁效果

這篇文章中,我們簡單講下CCScrollview,顧名思義,Scrollview,滾動檢視,無論在android,ios,黑莓上都有這個滾動檢視。那我們來看下cocos2dx中的CCScrollview,我這個版本的cocos2dx是2.0.4版本的,貌似前幾個版本都有點不一樣。OK,下面我直接上程式碼:

在標頭檔案中.h:

  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.     virtualbool init();  
  6.     // there's no 'id' in cpp, so we recommend to return the class instance pointer
  7.     static cocos2d::CCScene* scene();  
  8.     // a selector callback
  9.     void menuCloseCallback(CCObject* pSender);  
  10.     // preprocessor macro for "static create()" constructor ( node() deprecated )
  11.     CREATE_FUNC(HelloWorld);  
  12. public:  
  13.     void scrollViewDidScroll(cocos2d::extension::CCScrollView *view);  
  14.     void scrollViewDidZoom(cocos2d::extension::CCScrollView *view);  
  15. private:  
  16.     cocos2d::extension::CCScrollView *showScrollView;  
  17.     int curPage;  
  18. };  

稍微解釋下,首頁繼承CCScrollViewDelegate這個類,裡面有兩個純虛擬函式,重寫這兩個方法,一個是滾動的,一個是縮放的,定義一個ccscrollview這樣一個物件。

看下.cpp:

  1. bool HelloWorld::init()  
  2. {  
  3.     //////////////////////////////
  4.     // 1. super init first
  5.     if ( !CCLayer::init() )  
  6.     {  
  7.         returnfalse;  
  8.     }  
  9.     //獲取視窗大小
  10.     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
  11.     CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();  
  12.     //建立一個層
  13.     CCLayer *slayer=CCLayer::create();  
  14.     for (int i=1; i<5; i++) {  
  15.         //背景
  16.         CCSprite *bgsprite = CCSprite::create("[email protected]");  
  17.         bgsprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));  
  18.         slayer->addChild(bgsprite,1);  
  19.         CCString *nameString=CCString::createWithFormat("sprite%[email protected]",i);  
  20.         CCSprite *sprite = CCSprite::create(nameString->getCString());  
  21.         sprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));  
  22.         slayer->addChild(sprite,1);  
  23.     }  
  24.     showScrollView = CCScrollView::create(CCSizeMake(visibleSize.width, visibleSize.height), slayer);  
  25.     showScrollView->setContentOffset(CCPointZero);  
  26.     //false自己寫touch事件
  27.     showScrollView->setTouchEnabled(true);  
  28.     showScrollView->setDelegate(this);  
  29.     //滾動方向
  30.     showScrollView->setDirection(kCCScrollViewDirectionHorizontal);  
  31.     showScrollView->setBounceable(true);  
  32.   //  slayer->setContentSize(CCSizeMake(visibleSize.width*3, visibleSize.height));
  33.     showScrollView->setContentSize(CCSizeMake(visibleSize.width*4, visibleSize.height));  
  34.     this->addChild(showScrollView,1);  
  35.     //建立pagecontrol
  36.     for (int i=1; i<5; i++) {  
  37.         CCSprite *pageControlSprite=CCSprite::create("[email protected]");  
  38.         pageControlSprite->setPosition(ccp( origin.x + (visibleSize.width - 4 * pageControlSprite->getContentSize().width)/2 + pageControlSprite->getContentSize().width * (i-1), origin.y + 30));  
  39.         pageControlSprite->setTag(100+i);  
  40.         this->addChild(pageControlSprite, 1);  
  41.     }  
  42.     //預設是第一頁選中
  43.     CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(101);  
  44.     //換貼圖
  45.     CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");  
  46.     selectedSrite->setTexture(aTexture);  
  47.     curPage=1;  
  48.     //觸控分發
  49.   //  CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, false);
  50.     returntrue;  
  51. }  

回撥函式:
  1. void HelloWorld::scrollViewDidScroll(CCScrollView *view)  
  2. {  
  3.      CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
  4.      curPage=(int)fabsf(showScrollView->getContentOffset().x/visibleSize.width)+1;  
  5.      for (int i=1; i<5; i++) {  
  6.         if (curPage==i) {  
  7.             CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+curPage);  
  8.             CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");  
  9.             selectedSrite->setTexture(aTexture);  
  10.         }  
  11.         else
  12.         {  
  13.             CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+i);  
  14.             CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");  
  15.             selectedSrite->setTexture(aTexture);  
  16.         }  
  17.     }  
  18.   //  CCLOG("%d",curPage);
  19. }  
  20. void HelloWorld::scrollViewDidZoom(CCScrollView *view)  
  21. {  
  22. }  

OK,就這麼簡單,貌似ccscrollview沒有按一頁一頁那樣的滑動,哪個童鞋知道的可以告訴我。。。O(∩_∩)O,看效果:



~~~~~~~~