cocos2dx ccscrollview 實現翻頁效果
阿新 • • 發佈:2019-02-19
這篇文章中,我們簡單講下CCScrollview,顧名思義,Scrollview,滾動檢視,無論在android,ios,黑莓上都有這個滾動檢視。那我們來看下cocos2dx中的CCScrollview,我這個版本的cocos2dx是2.0.4版本的,貌似前幾個版本都有點不一樣。OK,下面我直接上程式碼:
在標頭檔案中.h:
- class HelloWorld : public cocos2d::CCLayer, public cocos2d::extension::CCScrollViewDelegate
- {
- public:
-
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
- virtualbool init();
- // there's no 'id' in cpp, so we recommend to return the class instance pointer
- static cocos2d::CCScene* scene();
- // a selector callback
- void menuCloseCallback(CCObject* pSender);
-
// preprocessor macro for "static create()" constructor ( node() deprecated )
- CREATE_FUNC(HelloWorld);
- public:
- void scrollViewDidScroll(cocos2d::extension::CCScrollView *view);
- void scrollViewDidZoom(cocos2d::extension::CCScrollView *view);
- private:
- cocos2d::extension::CCScrollView *showScrollView;
- int curPage;
- };
稍微解釋下,首頁繼承CCScrollViewDelegate這個類,裡面有兩個純虛擬函式,重寫這兩個方法,一個是滾動的,一個是縮放的,定義一個ccscrollview這樣一個物件。
看下.cpp:
- bool HelloWorld::init()
- {
- //////////////////////////////
- // 1. super init first
- if ( !CCLayer::init() )
- {
- returnfalse;
- }
- //獲取視窗大小
- CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
- CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
- //建立一個層
- CCLayer *slayer=CCLayer::create();
- for (int i=1; i<5; i++) {
- //背景
- CCSprite *bgsprite = CCSprite::create("[email protected]");
- bgsprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));
- slayer->addChild(bgsprite,1);
- CCString *nameString=CCString::createWithFormat("sprite%[email protected]",i);
- CCSprite *sprite = CCSprite::create(nameString->getCString());
- sprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));
- slayer->addChild(sprite,1);
- }
- showScrollView = CCScrollView::create(CCSizeMake(visibleSize.width, visibleSize.height), slayer);
- showScrollView->setContentOffset(CCPointZero);
- //false自己寫touch事件
- showScrollView->setTouchEnabled(true);
- showScrollView->setDelegate(this);
- //滾動方向
- showScrollView->setDirection(kCCScrollViewDirectionHorizontal);
- showScrollView->setBounceable(true);
- // slayer->setContentSize(CCSizeMake(visibleSize.width*3, visibleSize.height));
- showScrollView->setContentSize(CCSizeMake(visibleSize.width*4, visibleSize.height));
- this->addChild(showScrollView,1);
- //建立pagecontrol
- for (int i=1; i<5; i++) {
- CCSprite *pageControlSprite=CCSprite::create("[email protected]");
- pageControlSprite->setPosition(ccp( origin.x + (visibleSize.width - 4 * pageControlSprite->getContentSize().width)/2 + pageControlSprite->getContentSize().width * (i-1), origin.y + 30));
- pageControlSprite->setTag(100+i);
- this->addChild(pageControlSprite, 1);
- }
- //預設是第一頁選中
- CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(101);
- //換貼圖
- CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");
- selectedSrite->setTexture(aTexture);
- curPage=1;
- //觸控分發
- // CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, false);
- returntrue;
- }
回撥函式:
- void HelloWorld::scrollViewDidScroll(CCScrollView *view)
- {
- CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
- curPage=(int)fabsf(showScrollView->getContentOffset().x/visibleSize.width)+1;
- for (int i=1; i<5; i++) {
- if (curPage==i) {
- CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+curPage);
- CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");
- selectedSrite->setTexture(aTexture);
- }
- else
- {
- CCSprite *selectedSrite = (CCSprite *)this->getChildByTag(100+i);
- CCTexture2D *aTexture =CCTextureCache::sharedTextureCache()->addImage("[email protected]");
- selectedSrite->setTexture(aTexture);
- }
- }
- // CCLOG("%d",curPage);
- }
- void HelloWorld::scrollViewDidZoom(CCScrollView *view)
- {
- }
OK,就這麼簡單,貌似ccscrollview沒有按一頁一頁那樣的滑動,哪個童鞋知道的可以告訴我。。。O(∩_∩)O,看效果: