#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实现背包翻页,仅供参考的更多相关文章

  1. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  2. Ubuntu 12.04 分区方案(仅供参考)

    Ubuntu 12.04 分区方案(仅供参考)   总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...

  3. VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)

    自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...

  4. mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考

    数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点.   请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...

  5. jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]

    先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...

  6. normalizr实践使用(个人总结,仅供参考)

    # normalizr实践使用 原数据 (自编数据,本数据仅供参考) var aaaObj ={ "id" : "0000000000000000000000000000 ...

  7. 第二步 (仅供参考) sencha touch 使用cmd打包apk

    最新版本的cmd可以直接将sencha touch项目打包成本地应用,不过还有很多不足,本文仅供参考 通过sencha app build native命令可以直接将项目打包成本地应用,不过在命令运行 ...

  8. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)

    先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...

  9. 分享分享JavaScript100例-仅供参考

    最近一直在做项目,分享下以前收集的Javascript100例,仅供参考. http://files.cnblogs.com/52net/JavaScript100例.zip

随机推荐

  1. C中的几组指针

    1.二维数组 下面就三种二维数组进行说明. 1: int **Ptr; 2: int *Ptr[ 5 ]; 3: int ( *Ptr )[ 5 ]; 以上三例都是整数的二维数组,都可以用形如 Ptr ...

  2. MapReduce调度与执行原理之作业初始化

    前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相关 ...

  3. 【Demo 0001】Java基础-数据类型

    本章学习要点:       1.  了解Java 语言       2.  了解Java程序结构;        3.  了解Java中基本数据类型;       4.  掌握基本数据类型之间的运算 ...

  4. html ui设计案例

    1.jquery特效:http://www.5icool.org 2. http://www.open-lib.com/Lib/1992.jsp

  5. 一场刺激的游戏——很文艺的山东省第四届ACM赛总结(菜鸟版)

               人生就像一个个节点,节点中或许有成功,失败,满足,遗憾,但是只要它是不可复制的,在日后,便是美好.                                         ...

  6. 按 Eclipse 开发喜好重新布置 cocos2dx 目录层次

    [tonyfield 2013.08.29 ] 1.  Cocos2dx 库的改动 处于个人的固执,花一天时间重新布置了cocos2dx 2.1.4的目录层次,将android平台无关的代码全数裁剪, ...

  7. IE6下position:fixed不支持问题及其解决方式

    IE6有诸多奇葩,不支持position:fixed就是当中之中的一个.所以在做一些比方固定在顶部或者底部或者固定元素的效果时须要考虑兼容IE6的这个问题.解决方式是用Ie6的hack. *html ...

  8. POJ 3696 神TM数论

    鸣谢: http://blog.csdn.net/yhrun/article/details/6908470 http://blog.sina.com.cn/s/blog_6a46cc3f0100tv ...

  9. MySQL错误:You are using safe update mode and you tried to update a table without a WHERE that uses a K

    转载自:http://blog.csdn.net/dragonpeng2008/article/details/7279590 Error: 1175 SQLSTATE: HY000 (ER_UPDA ...

  10. blend

    看着各位大虾出系列文章貌似挺好玩的,本人耍了2个月的Wpf,有点见解,希望各位看官笑纳.本系列第一章就先来点简单又有用的吧o(∩_∩)o 哈哈.. 终于效果例如以下: ←点它 本人一直在做WPF算是第 ...