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实现背包翻页,布布扣,bubuko.com

时间: 2024-08-24 08:37:28

coco2d-x CCScrollView实现背包翻页的相关文章

XtraGrid滚轮翻页

滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在XtraGrid的GridView中实现了鼠标滚轮翻页. 我新建了一个组件继承原本的GridControl,在组件中添加了一个ImageList,专门存放一些资源图片.用于实现动态图的效果. 添加一个自定义委托的参数与枚举,委托参数用于传递分页的信息.     public class PagingEventArgs : EventArgs     {        public int PageSize { get; set; }   

自定义 ViewGroup 支持无限循环翻页之三(响应回调事件)

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处,再次感谢 ####################################################################### 自定义 ViewGroup 支持无限循环翻页系列 自定义 ViewGroup 支持无限循环翻页之一(重写 onLayout以及 dispatchDraw) 自定义 ViewGroup 支持无限循环翻页之二(处理触摸事件)

多个ImageView组成界面实现上下滑动翻页

============问题描述============ 上面这个就是我的手机界面,我想实现用手上下滑动翻页,翻页过后再来更新这10张照片的内容(图片从服务器GET下来已经实现),现在我就是想晓得这个滑动翻页该用什么组件来实现哦,小弟菜鸟一枚,希望大家多给提点哈 ============解决方案1============ 用fragment吧,改一下fragment里面的数据就行了 ============解决方案2============ 搜一下图片播放器吧

ViewPager实现翻页步骤

之前觉得滑动翻页的效果挺炫的,目前初学android,所以自己在项目中尝试实现了这个效果.数据是动态的.实现效果主要有几个步骤: 1.创建两个布局文件,一个布局文件定义viewPager组件,如  <android.support.v4.view.ViewPager         android:id="@+id/vp_articles"        android:layout_width="match_parent"        android:la

bootstrap(5)分页,翻页,徽章效果

一 : 分页效果 我们可以看到在网站上的翻页效果如下: 使用bootstrap如何实现的呢? 代码如下: <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true"&g

datatables之翻页、搜索、排序事件

$(document).ready(function() { $('#table').on('order.dt', function() { console.log('排序'); }).on('search.dt', function() { console.log('搜索'); }).on('page.dt', function() { console.log('翻页'); }).dataTable(); });

js 翻页

翻页功能是js很基础的一个算法,且用得很多,所以必须掌握此项技能. 我们要想清楚在实现翻页的过程中需要哪几个步骤: 1.我们首先需要的变量有哪些,必须的有一个存放当前页码的变量nowPage.一个存放最大页数的变量maxPage,再一个存放每一页显示多少行的常量 PAGECELL: 2.我们需要哪些函数来实现,实现哪些功能,肯定要有的是 向上翻页.向下翻页 3.过程中要注意什么,要翻到下一页,就必须清楚当页的内容,不然会在当前页下面加载 其实就这么简单,考虑清楚后就可以进行代码的实现了. 以上思

oracle清屏翻页配置

在oracle数据库刚安装好时,输入命令时不能跟mysql数据库一样,清楚屏幕上执行过的命令和翻页重复执行上次执行过的命令,输错命令是也不能移动光标进行修改,那么这在工作中是很不方便的.那这篇文档就是安装工具,使oracle能够支持清屏翻页及自由移动光标. 首先下载三个源码包 1)IO-Tty-1.07.tar.gz 2)Term-ReadLine-Gnu-1.16.tar.gz 3)uniread-1.01.tar.gz 2.安装 1)解压缩至本地 [[email protected] Des

ajax 显示评论并制作翻页

修改后台评论模型 创建search方法 //取出一件商品的评论 public function search($goodsId,$pageSize=5) { //要做ajax翻页 所以要自己写 $where['a.goods_id']=array('eq',$goodsId); //取出总的记录数 $count=$this->where($where)->count(); //计算总的页数 $pageCount=ceil($count / $pageSize); //获取当前页 $curren