注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

轻松度过每一天

真的猛士敢于直面惨淡的人生,敢于正视淋漓的鲜血,这是怎样的哀痛者和幸福者!!

 
 
 

日志

 
 
关于我

When you are young, you may want several love experiences. But as timegoes on, you will realize that if you really love someone, the wholelife will not be enough. You need time to know, to forgive and to love.All this needs a very big mind.

网易考拉推荐

Cocos2dx学习之CCScrollView(转)  

2014-08-12 21:15:57|  分类: com.myCompany.Te |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.cnblogs.com/dcxing/archive/2012/12/31/2840217.html

最近元旦放假,想想无聊,把cocos2d-x 2.0版本之后提供的一些控件总结一下吧。那么就从CCScrollView开始吧。

  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事件。

  评论这张
 
阅读(143)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018