coco2d-x CCScrollView实现背包翻页,仅供参考
2013-07-09 20:58
411 查看
#include "CCCGameScrollView.h" USING_NS_CC; USING_NS_CC_EXT; CCCGameScrollView::CCCGameScrollView() :m_fAdjustSpeed(ADJUST_ANIM_VELOCITY) , m_nPrePage(0) { } CCCGameScrollView::~CCCGameScrollView() { } bool CCCGameScrollView::init() { if (!CCScrollView::init()) { return false; } return true; } bool CCCGameScrollView::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent ) { m_BeginOffset = getContentOffset(); return CCScrollView::ccTouchBegan(pTouch, pEvent); } void CCCGameScrollView::ccTouchMoved( CCTouch *pTouch, CCEvent *pEvent ) { CCScrollView::ccTouchMoved(pTouch, pEvent); } void CCCGameScrollView::ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent ) { CCPoint touchPoint = pTouch->getLocationInView(); touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint ); CCScrollView::ccTouchEnded(pTouch, pEvent); CCPoint m_EndOffset=getContentOffset(); if (m_BeginOffset.equals(m_EndOffset)) { int nPage = abs(m_EndOffset.x / (int)m_CellSize.width); m_pDelegate->scrollViewClick(nPage); // pDele->scrollViewClick(m_EndOffset,touchPoint,m_pContainer->getChildByTag(nPage),nPage); return ; } adjustScrollView(m_BeginOffset,m_EndOffset); } void CCCGameScrollView::ccTouchCancelled( CCTouch *pTouch, CCEvent *pEvent ) { CCScrollView::ccTouchCancelled(pTouch, pEvent); CCPoint m_EndOffset=getContentOffset(); adjustScrollView(m_BeginOffset,m_EndOffset); } void CCCGameScrollView::adjustScrollView( const cocos2d::CCPoint& oBegin,const cocos2d::CCPoint & oEnd) { int nPage = abs(oBegin.x / (int)m_CellSize.width); int nAdjustPage = 0; int nDis = oEnd.x-oBegin.x; if (nDis<-getViewSize().width/5) { nAdjustPage=nPage+1; } else if (nDis>getViewSize().width/5) { nAdjustPage=nPage-1; } else { nAdjustPage=nPage; } nAdjustPage=MIN(nAdjustPage,m_nPageCount-1); nAdjustPage=MAX(nAdjustPage,0); scrollToPage(nAdjustPage); } void CCCGameScrollView::scrollToPage( int nPage ) { // 关闭CCScrollView中的自调整 unscheduleAllSelectors(); CCPoint oOffset=getContentOffset(); // 调整位置 CCPoint adjustPos=ccp(-m_CellSize.width*nPage,0); // 调整动画时间 float adjustAnimDelay=ccpDistance(adjustPos,oOffset)/m_fAdjustSpeed; // 调整位置 setContentOffsetInDuration(adjustPos, adjustAnimDelay); if (nPage!=m_nPrePage) { schedule(schedule_selector(CCCGameScrollView::onScrollEnd),adjustAnimDelay,0,0.0f); m_nPrePage=nPage; } } void CCCGameScrollView::onScrollEnd(float fDelay) { int nPage=getCurPage(); m_pDelegate->scrollViewScrollEnd(nPage); } void CCCGameScrollView::scrollToNextPage() { int nCurPage=getCurPage(); if (nCurPage>=m_nPageCount-1) { return ; } scrollToPage(nCurPage+1); } void CCCGameScrollView::scrollToPrePage() { int nCurPage=getCurPage(); if (nCurPage<=0) { return ; } scrollToPage(nCurPage-1); } bool CCCGameScrollView::createContainer(CCCGameScrollViewDelegate* pDele, int nCount, //总共的Page数量 const cocos2d::CCSize & oSize )//每一个Page的尺寸 { m_nPageCount=nCount; m_CellSize=oSize; m_pDelegate = pDele; CCLayer* pContainer=CCLayer::create(); pContainer->setAnchorPoint(CCPointZero); pContainer->setPosition(CCPointZero); CCSize winSize=CCDirector::sharedDirector()->getVisibleSize(); for (int i=0;i<nCount;++i) { CCNode* pNode=CCNode::create(); pDele->scrollViewInitPage(pNode,i); pNode->setPosition(ccp(winSize.width/2+i*oSize.width,winSize.height/2)); pNode->setTag(i); pContainer->addChild(pNode); } setContainer(pContainer); setContentSize(CCSizeMake(oSize.width*nCount,oSize.height)); return true; } int CCCGameScrollView::getCurPage() { return abs(getContentOffset().x / (int)m_CellSize.width); }
#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;class CCCGameScrollViewDelegate: public cocos2d::extension::CCScrollViewDelegate{public: //初始化每个单独Page的回调 virtual bool scrollViewInitPage(cocos2d::CCNode* pPage,int nPage){return true;}; //点击一个Page的回调 virtual
void scrollViewClick(int nPage ){}; //每一次切换Page的回调 virtual void scrollViewScrollEnd(int nPage){};};
#include "cocos2d.h" #include "cocos-ext.h" #include "CCCGameScrollViewDelegate.h" // 校正滑动动画速度 #define ADJUST_ANIM_VELOCITY 2000 class CCCGameScrollView : public cocos2d::extension::CCScrollView { private: CCCGameScrollViewDelegate* m_pDelegate; public: CCCGameScrollView(); ~CCCGameScrollView(); public: CREATE_FUNC(CCCGameScrollView); bool init(); bool createContainer(CCCGameScrollViewDelegate* pDele, int nCount,const cocos2d::CCSize & oSize ); virtual bool ccTouchBegan( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); virtual void ccTouchMoved( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); virtual void ccTouchEnded( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); virtual void ccTouchCancelled( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); void scrollToPage(int nPage); void scrollToNextPage(); void scrollToPrePage(); int getCurPage(); protected: void adjustScrollView(const cocos2d::CCPoint& oBegin,const cocos2d::CCPoint & oEnd); virtual void onScrollEnd(float fDelay); protected: int m_nPageCount; int m_nPrePage; cocos2d::CCPoint m_BeginOffset; cocos2d::CCSize m_CellSize; float m_fAdjustSpeed; };
#include "cocos2d.h" #include "cocos-ext.h" #include "CCCGameScrollViewDelegate.h" #include "CCCGameScrollView.h" USING_NS_CC; USING_NS_CC_EXT; class PageViewLayer : public CCLayer, public CCCGameScrollViewDelegate { public: CCCGameScrollView* m_ScrollView; virtual bool init(); virtual void scrollViewDidScroll( cocos2d::extension::CCScrollView* view ) {}; virtual void scrollViewDidZoom( cocos2d::extension::CCScrollView* view ) {}; virtual bool scrollViewInitPage( cocos2d::CCNode* pPage,int nPage ); virtual void scrollViewClick(int nPage ); virtual void scrollViewScrollEnd(int nPage ); CREATE_FUNC(PageViewLayer); };
#include "PageViewLayer.h" bool PageViewLayer::init() { if (!CCLayer::init()) { return false; } CCSprite* pBackGround=CCSprite::create("btn_bar04.png"); pBackGround->setPosition(ccp(480,320)); addChild(pBackGround); // CCScrollView m_ScrollView = CCCGameScrollView::create(); m_ScrollView->createContainer( this, 4,//总共的Page数量 CCSizeMake(440,640));//每一个Page的尺寸 m_ScrollView->setPosition(ccp(240,0)); m_ScrollView->setContentOffset(CCPointZero); m_ScrollView->setViewSize(CCSizeMake(400, 640)); m_ScrollView->setDirection(kCCScrollViewDirectionHorizontal); this->addChild(m_ScrollView); return true; } bool PageViewLayer::scrollViewInitPage( cocos2d::CCNode* pPage,int nPage ) { CCSprite *sprite = CCSprite::create("gezi.png"); sprite->setPosition(ccp(-300,0)); pPage->addChild(sprite); return true; } void PageViewLayer::scrollViewScrollEnd(int nPage ) { } void PageViewLayer::scrollViewClick(int nPage ) { }
相关文章推荐
- coco2d-x CCScrollView实现背包翻页,仅供参考
- coco2d-x CCScrollView实现背包翻页,仅供参考
- coco2d-x CCScrollView实现背包翻页
- cocos2dx-CCTableView或CCScrollView之滑动翻页实现
- cocos2dx ccscrollview 实现翻页效果
- cocos2d实现类似CCMenu菜单类控件,在CCScrollView滚动, lua脚本控件
- coco2d-x CCScrollView实现关卡选择 新手引导 帮助界面
- coco2d-x CCScrollView实现关卡选择 新手引导 帮助界面
- cocos2dx 在ccscrollview 实现滚动添加menu
- cocos2d实现类似CCMenu菜单类控件,在CCScrollView滚动, lua脚本控件
- 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面
- [置顶] cocos2d实现类似CCMenu菜单类控件,在CCScrollView滚动, lua脚本控件
- cocos2D中实现滑动菜单CCScrollView+CCMenu效果,(注意不是cocos2D-x)!!
- CCScrollView 实现帮助界面、关卡选择
- HorizontalScrollView 实现 ViewPager 可滑动翻页的tab
- 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面
- 自定义ViewPager、HorizontalScrollView、Indicator实现可滑动的头部
- cocos2d-x 2.0版本中CCScrollView的用法
- Android 用HorizontalScrollView实现滑动标签tabView
- cocos2dx CCScrollView使用示例