一.效果预览
git动态图:
二.使用:
1.下载示例项目:
http://pan.baidu.com/share/link?shareid=2511857370&uk=2685725110
2.解压缩后会得到CCGameScrollView.h和CCGameScrollView.cpp,将他们添加到工程中来.
3.使你的类继承CCGameScrollView并实现5个纯虚接口:
1 2 3 4 5 6 7 8 9 10 | class CLevelSelectLayer : public CCLayer , public CCCGameScrollViewDelegate { virtual void scrollViewDidScroll( cocos2d::extension::CCScrollView *view ); virtual void scrollViewDidZoom( cocos2d::extension::CCScrollView *view ); virtual bool scrollViewInitPage( cocos2d::CCNode *pScroll, cocos2d::CCNode *pPage, int nPage ); virtual void scrollViewClick( const cocos2d::CCPoint &oOffset, const cocos2d::CCPoint &oPoint , cocos2d::CCNode *pPage, int nPage ); virtual void scrollViewScrollEnd( cocos2d::CCNode *pPage, int nPage ); } |
4.在你的类的init方法中添加变量
1 2 3 4 5 6 7 8 9 10 11 12 | bool CLevelSelectLayer::init() { // CCScrollView CCCGameScrollView*m_ScrollView = CCCGameScrollView::create(); //创建一个scrollview m_ScrollView->setDirection(kCCScrollViewDirectionHorizontal); //设置滚动的方向,有三种可以选择 m_ScrollView->createContainer(this, 5, CCSizeMake(CGlobal::s_oVisibleSize.width, CGlobal::s_oVisibleSize.height));//设置page的数量和尺寸 m_ScrollView->setPosition(ccp(0, 0)); m_ScrollView->setViewSize(CGlobal::s_oVisibleSize);//设置视口的尺寸 addChild(m_ScrollView);//添加 return true; } |
5.在 scrollViewInitPage中初始化每一个page(注意:坐标以整个Page的中心点为原点)
1 2 3 4 5 6 7 8 9 | bool CThemeSelectLayer::scrollViewInitPage( cocos2d::CCNode *pScroll, cocos2d::CCNode *pPage, int nPage ) { CCString str; str.initWithFormat("%03d.png", nPage + 1); CCSprite *sprite = CCSprite::create(str.getCString()); pPage->addChild(sprite, 0, kPageBack); return true; } |
6.在scrollViewClick中处理点击page事件
1 2 3 4 | void CThemeSelectLayer::scrollViewClick( const cocos2d::CCPoint &oOffset, const cocos2d::CCPoint &oPoint , cocos2d::CCNode *pPage, int nPage ) { CCLog("Page Click=%d", nPage); } |
7.在scrollViewScrollEnd处理每一次page滚动完毕事件
1 2 3 4 | void CThemeSelectLayer::scrollViewScrollEnd( cocos2d::CCNode *pPage, int nPage ) { CCLog("Current Page=%d", nPage); } |
结语:
并没有细看CCScrollView的代码,只是实现了功能,肯定有错误和不完整的地方,希望大家能够指出!有什么不理解的大家也可以留言,我会一一解答~