zoukankan      html  css  js  c++  java
  • cocos2d-x CCScrollView

    转自:http://www.cnblogs.com/dcxing/archive/2012/12/31/2840217.html

    ScrollView一般用在游戏的关卡选择这种类似的场景还有帮助这种场景之中,当然,也可以用其他一些选择菜单的场景。用途还是比较广泛的嘛。

    首先CCScrollView 在 Cocosd-x 的扩展库里面,要是使用的话,需要引入扩展包,然后添加命名空间

    #include "cocos-ext.h"
    USING_NS_CC_EXT;//cocos2dx定义的宏

      然后实现CCScrollViewDelegate,这个其实是和UISCrollView和相似的。

      必须实现的两个方法。

    virtual void scrollViewDidScroll(CCScrollView* view);
    virtual void scrollViewDidZoom(CCScrollView* view);

      现在我们开始创建CCScrollView对象了。当然我们最好还是再创建一个Layer用来作为CCScrollView的Container。

    scrollView=CCScrollView::create();//创建一个scrollView
    
    continerLayer=CCLayer::create();
    CCSprite *sprite1=CCSprite::spriteWithFile("image1.jpg");
    sprite1->setPosition(ccp(240+0*480, 160));
    continerLayer->addChild(sprite1);
    CCSprite *sprite2=CCSprite::spriteWithFile("image2.jpg");
    sprite2->setPosition(ccp(240+1*480, 160));
    continerLayer->addChild(sprite2);
    continerLayer->setAnchorPoint(CCPointZero);
    continerLayer->setPosition(CCPointZero);
    scrollView
    ->setAnchorPoint(CCPointZero); scrollView->setPosition(CCPointZero); // 显示显示的区域 scrollView->setViewSize(CCSizeMake(480, 320));//设置view的大小 scrollView->setContentOffset(CCPointZero);
    continerLayer
    ->setContentSize(CCSizeMake(960, 320));//设置滚动区域的大小 // 显示滑动的区域大小 scrollview的实际大小 scrollView->setContentSize(CCSizeMake(960, 320));//设置scrollview区域的大小 scrollView->setContainer(continerLayer); //因为要自己实现触摸消息,所以这里设为false//设置需要滚动的内容 scrollView->setTouchEnabled(true); scrollView->setDirection(kCCScrollViewDirectionHorizontal); //设置滚动的方向,有三种可以选择 scrollView->setDelegate(this); this->addChild(scrollView);

    ok,这样的话我们就创建完ScrollView了,但是要想做到好一点的效果还是要做一些其他处理。这里主要是设置滑动之后自动让ScrollView自动调整大小。

    bool CCScrollViewLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
    {
        return true;
    }
     
    voidCCScrollViewLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
    {
        CCLOG("move");
    }
    
     
    
    voidCCScrollViewLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
    
    {
    
        adjustScrollView();
    
    }
    
    voidCCScrollViewLayer::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
    {
        adjustScrollView();
    }
    
    void CCScrollViewLayer::adjustScrollView()
    {
        // 关闭CCScrollView中的自调整
        scrollView->unscheduleAllSelectors();
        int x = scrollView->getContentOffset().x;
        CCLOG("offset=%d",x);
    
        int offset = (int) x % 480;
        // 调整位置
        CCPoint adjustPos;
        // 调整动画时间
        float adjustAnimDelay;
        // 向右滑动是正向左滑动是负
        if (offset < -240) {
        // 计算下一页位置,时间
            adjustPos = ccpSub(scrollView->getContentOffset(), ccp(480 + offset, 0));
            adjustAnimDelay = (float) (480 + offset) / ADJUST_ANIMATION_VELOCITY;
        }
        else {
            // 计算当前页位置,时间
            adjustPos = ccpSub(scrollView->getContentOffset(), ccp(offset, 0));
            // 这里要取绝对值,否则在第一页往左翻动的时,保证adjustAnimDelay为正数
            adjustAnimDelay = (float) abs(offset) / ADJUST_ANIMATION_VELOCITY;
        }
        // 调整位置
    
        scrollView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);
    }

    当然再onEnter方法中加入

    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, false);

    保证当前layer和scrollview都能获得touch事件。

  • 相关阅读:
    Atitit js nodejs下的进程管理wmic process进程管理
    Atitit 提取sfit特征点,并绘制到原图上
    Atitit 局部图查找大图 方法 与 说明
    Atitit java读取tif文件为空null的解决 图像处理
    Aititi 特征点检测算法与匹配的前世今生与历史传承attilax总结v4
    Atitit it行业图像处理行业软件行业感到到迷茫的三大原因和解决方案
    Atitit js nodejs 图像处理压缩缩放算法 attilax总结
    Atitit 2017年第68界机器视觉图像处理学术大会会议记要attilax总结自建学院自颁学位理论
    Atitit nodejs js 获取图像分辨率 尺寸 大小 宽度 高度
    Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/3214515.html
Copyright © 2011-2022 走看看