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

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

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

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

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

  必须实现的两个方法。

  1. virtual void scrollViewDidScroll(CCScrollView* view);
  2. virtual void scrollViewDidZoom(CCScrollView* view);

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

  1. scrollView=CCScrollView::create();//创建一个scrollView
  2.  
  3. continerLayer=CCLayer::create();
  4. CCSprite *sprite1=CCSprite::spriteWithFile("image1.jpg");
  5. sprite1->setPosition(ccp(+*, ));
  6. continerLayer->addChild(sprite1);
  7. CCSprite *sprite2=CCSprite::spriteWithFile("image2.jpg");
  8. sprite2->setPosition(ccp(+*, ));
  9. continerLayer->addChild(sprite2);
  10. continerLayer->setAnchorPoint(CCPointZero);
  11. continerLayer->setPosition(CCPointZero);
  12. scrollView->setAnchorPoint(CCPointZero);
  13. scrollView->setPosition(CCPointZero);
  14.  
  15. // 显示显示的区域
  16. scrollView->setViewSize(CCSizeMake(, ));//设置view的大小
  17. scrollView->setContentOffset(CCPointZero);
  18. continerLayer->setContentSize(CCSizeMake(, ));//设置滚动区域的大小
  19. // 显示滑动的区域大小 scrollview的实际大小
  20. scrollView->setContentSize(CCSizeMake(, ));//设置scrollview区域的大小
  21. scrollView->setContainer(continerLayer);
  22.  
  23. //因为要自己实现触摸消息,所以这里设为false//设置需要滚动的内容
  24. scrollView->setTouchEnabled(true);
  25. scrollView->setDirection(kCCScrollViewDirectionHorizontal); //设置滚动的方向,有三种可以选择
  26. scrollView->setDelegate(this);
  27.  
  28. this->addChild(scrollView);

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

  1. bool CCScrollViewLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
  2. {
  3. return true;
  4. }
  5.  
  6. voidCCScrollViewLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
  7. {
  8. CCLOG("move");
  9. }
  10.  
  11. voidCCScrollViewLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
  12.  
  13. {
  14.  
  15. adjustScrollView();
  16.  
  17. }
  18.  
  19. voidCCScrollViewLayer::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
  20. {
  21. adjustScrollView();
  22. }
  23.  
  24. void CCScrollViewLayer::adjustScrollView()
  25. {
  26. // 关闭CCScrollView中的自调整
  27. scrollView->unscheduleAllSelectors();
  28. int x = scrollView->getContentOffset().x;
  29. CCLOG("offset=%d",x);
  30.  
  31. int offset = (int) x % ;
  32. // 调整位置
  33. CCPoint adjustPos;
  34. // 调整动画时间
  35. float adjustAnimDelay;
  36. // 向右滑动是正向左滑动是负
  37. if (offset < -) {
  38. // 计算下一页位置,时间
  39. adjustPos = ccpSub(scrollView->getContentOffset(), ccp( + offset, ));
  40. adjustAnimDelay = (float) ( + offset) / ADJUST_ANIMATION_VELOCITY;
  41. }
  42. else {
  43. // 计算当前页位置,时间
  44. adjustPos = ccpSub(scrollView->getContentOffset(), ccp(offset, ));
  45. // 这里要取绝对值,否则在第一页往左翻动的时,保证adjustAnimDelay为正数
  46. adjustAnimDelay = (float) abs(offset) / ADJUST_ANIMATION_VELOCITY;
  47. }
  48. // 调整位置
  49.  
  50. scrollView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);
  51. }

当然再onEnter方法中加入

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

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

cocos2d-x CCScrollView的更多相关文章

  1. cocos2d在CCScrollView中嵌套CCMenu列表

    在cocos2d中,CCMenuItem经常被当做按钮使用.在有许多条目需要逐行显示,并且点击每个条目都触发对应的事件的需求下,最容易想到的是用CCScrollView嵌套CCMenu. 但默认情况下 ...

  2. cocos2d-x CCScrollView和CCTableView的使用(转载)

    转载请注明来自:Alex Zhou的程序世界,本文链接:http://codingnow.cn/cocos2d-x/1024.html //============================== ...

  3. cocos2dx 2.0 CCScrollView的用法以及滑动的原理

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_N ...

  4. CCScrollView/CCTableView(CCTableViewDelegate CCTableViewDataSource CCTableView-滑动列表-游戏中大量使用 非常重要的一个类)

    tableview scrollViewDidScroll函数中有一段   ----  即---滑动tableview时触发的函数 : 会将全部显示的cell又一次刷新(刷新函数中调用了自己定义的ta ...

  5. Cocos2d-x滚动列表具体解释(CCScrollView的使用)

    今天要写一个滚动列表功能,类似以下这样.(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似 ...

  6. coco2d-x CCScrollView实现背包翻页,仅供参考

    #include "CCCGameScrollView.h" USING_NS_CC; USING_NS_CC_EXT; CCCGameScrollView::CCCGameScr ...

  7. CCScrollView

    #ifndef TestCCScrollView_testScene_h #define TestCCScrollView_testScene_h #include "cocos2d.h&q ...

  8. cocos2d-x CCScrollView和CCTableView的使用

    在游戏和应用中常常要实现左右滑动展示游戏帮助.以列表显示内容的UI效果,就像android中的Gallery和ListView. 本文通过CCScrollView和CCTableView分别来实现这两 ...

  9. 【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜

    接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8 ...

  10. 【Cocos2d-x】VS2012开发2dx无法解析的外部符号解决记录(第一篇)【转】

    come from http://acoder.me/cocos2d-unresolved-external-symbol.html 看到cocos2d-x带了扩展包,心动的想尝试下,以下分享下我使用 ...

随机推荐

  1. Mysql读写分离(mysql-proxy)

    MySQL-Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析,查询过滤 ...

  2. 【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值

    转自:http://blog.csdn.net/lilongherolilong/article/details/6624390 先挖好坑,明天该去郑轻找虐 RMQ(Range Minimum/Max ...

  3. 锋利的jQuery读书笔记---jQuery中动画

    jQuery中的动画: 1.show和hide 2.fadeIn和fadeOut 3.slideUp和slideDown <!DOCTYPE html> <html> < ...

  4. HDU 5489 Removed Interval

    题意:求一段序列中删掉L个连续元素后的LIS. 解法:我的想法很复杂= =怎么说呢……首先用nlogn的方法求LIS得到的序列dp的第i项的意义为上升子序列所有长度为i的序列结尾元素的最小值,那么先倒 ...

  5. ArcGIS AO开发高亮显示某些要素

    参考代码1 ifeaturecursor pcur = ifeatureclass.search(iqueryfilter pfilter); pfilter.whereclause = strAdd ...

  6. Spring+iBatis+Atomikos实现JTA事务

    Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品. 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransacti ...

  7. 不知道帐号密码的情况下完全重装Mac Min的OS X10.7系统

    现状: 1.原系统OS X 10.7 2.老账号不知道密码 3.Mac小盒子 目的: 1.删除老账号 2.更新系统到10.9以上 尝试过程1: 1.按住option键 + 开机 2.选择“磁盘工具” ...

  8. MDI端口和MDIX端口是什么? 又有什么作用?

    是网线的标准A类接法和B类接法.也就是人们通常所说的交叉网线和直联网线.直联网线就是 白黄 黄 白绿 蓝 白兰 绿 白棕 棕 另一端同样如此.交叉网线就是 另一端的1和3,2和6对调.这样就成了交叉网 ...

  9. ubuntu 14.04 允许root 登录

    在/etc/lightdm/lightdm.conf里添加一下两句: greeter-show-manual-login=true allow-guest=false

  10. 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)

    本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...