#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 )
{ }
												

最新文章

  1. Entity Framework 实体框架的形成之旅--Code First的框架设计(5)
  2. ionic中获取坐标方法
  3. WP8 双击返回键退出
  4. 图层的transform属性
  5. 高级进程间通信之UNIX域套接字
  6. UTF-8、GB2312都支持的汉字截取函数
  7. ref和out,以及一般方法的引用参数和值参数寻解
  8. Spring 工作原理
  9. JavaJavaScript小问题系列之JSON解析
  10. C#中泛型之Dictionary
  11. 【感悟】一次不太好的寻找bug的体验,RecyclerView
  12. 用Sqoop进行Hive和MySQL之间的数据互导
  13. php 安装最新的redis连接扩展
  14. 浏览器修改或添加Cookie--chrome插件【edit this cookie】、【postman】
  15. 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)
  16. linux之创建用户
  17. Spring IOC 容器源码分析 - 循环依赖的解决办法
  18. Canvas事件绑定
  19. 深度认识 Sharding-JDBC:做最轻量级的数据库中间层
  20. linux查看端口被哪个服务占用的命令

热门文章

  1. find-a-jar-file-given-the-class-name
  2. 基于visual Studio2013解决面试题之0206hash表实现
  3. 记录路径dp-4713-Permutation
  4. Android调用系统相机、自己定义相机、处理大图片
  5. 基于特定值来推断隐藏显示元素的jQuery插件
  6. Excel设置下拉选项的方法
  7. 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
  8. php session 管理
  9. 第四章 Spring与JDBC的整合
  10. [ACM] hdu 4405 Aeroplane chess (概率DP)