coco2d-x CCScrollView实现背包翻页,仅供参考
#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实现背包翻页,仅供参考的更多相关文章
- Unity上一页下一页切换功能实现源码(仅供参考)
在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...
- Ubuntu 12.04 分区方案(仅供参考)
Ubuntu 12.04 分区方案(仅供参考) 总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...
- VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)
自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...
- jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]
先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...
- normalizr实践使用(个人总结,仅供参考)
# normalizr实践使用 原数据 (自编数据,本数据仅供参考) var aaaObj ={ "id" : "0000000000000000000000000000 ...
- 第二步 (仅供参考) sencha touch 使用cmd打包apk
最新版本的cmd可以直接将sencha touch项目打包成本地应用,不过还有很多不足,本文仅供参考 通过sencha app build native命令可以直接将项目打包成本地应用,不过在命令运行 ...
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...
- 分享分享JavaScript100例-仅供参考
最近一直在做项目,分享下以前收集的Javascript100例,仅供参考. http://files.cnblogs.com/52net/JavaScript100例.zip
随机推荐
- SPARK在linux中的部署,以及SPARK中聚类算法的使用
眼下,SPARK在大数据处理领域十分流行.尤其是对于大规模数据集上的机器学习算法.SPARK更具有优势.一下初步介绍SPARK在linux中的部署与使用,以及当中聚类算法的实现. 在官网http:// ...
- XDU 1284 寻找礼物
枚举+二分查找. A+B+C >= K ----> C >= K - A -B ----> 统计大于等于C的个数就可以. #include <cstdio&g ...
- 解决 Android SDK Manager不能下载旧版本的sdk的问题
解决无法使用Android SDK Manager下载SDK开发包的解决办法. 当我们在官网下载google的集成ADT,也就是adt-bundle-linux-x86.zip开发包,进行解压, 打 ...
- 用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)
在第"用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)---创建证书请求"章节中,我们介绍了怎样用XCA创建SSL证书请 ...
- 积累的VC编程小技巧之列表框
1.列表框中标题栏(Column)的添加 创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report.Align项里选择Top.Sort项里选择 ...
- ThinkPHP 3 的CURD管理用户信息 修改和删除
本节课大纲: 一.ThinkPHP 3 的CURD管理用户信息 http://localhost:8080/thinkphp/index.php/User/index 访问User类的index方法 ...
- 系统没有“internet信息服务(IIS)管理器”
系统没有“internet信息服务(IIS)管理器” | 浏览:8981 | 更新:2014-06-19 14:43 1 2 3 4 5 6 7 分步阅读 很多用户都在咨询:系统控制面板的管理工具中没 ...
- DMP文件的生成和使用
1.生成dmp的程序 #include <dbghelp.h> #pragma comment(lib, "dbghelp.lib") //设置异常处理回调函数Se ...
- ios王云鹤--iPhone中,点击换行,键盘消失。
1.要在声明文件中实现 UItextFieldDelegate 协议 2.在实现文件中实现 UItextFieldDelegate 协议 中键盘消失的方法即: -(BOOL)textFieldShou ...
- 疯狂Android演讲2 环境配置
笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/37053681 jdk-6u3-windows-i586-p.exe 下载地 ...