CCScrollView
- #ifndef TestCCScrollView_testScene_h
- #define TestCCScrollView_testScene_h
- #include "cocos2d.h"
- #include "cocos-ext.h"
- using namespace cocos2d;
- class testScene:public CCLayer,public extension::CCScrollViewDelegate
- {
- extension::CCScrollView *scrollView;
- public:
- virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);
- virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);
- public:
- virtual bool init();
- CREATE_FUNC(testScene);
- static CCScene* scene();
- //virtual void registerWithTouchDispatcher();
- virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);
- virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent);
- virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent);
- virtual void adjustScrollView();
- virtual void onEnter();
- };
- #endif
- //
- // testScene.cpp
- // TestCCScrollView
- //
- // Created by on 12-2-16.
- // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
- //
- #include <iostream>
- #include "testScene.h"
- using namespace cocos2d::extension;
- CCScene *testScene::scene()
- {
- CCScene *scene = CCScene::create();
- testScene *layer = testScene::create();
- scene->addChild(layer);
- return scene;
- }
- bool testScene::init()
- {
- if(!CCLayer::init())
- {
- return false;
- }
- scrollView = CCScrollView::create();
- CCLayer *continerLayer = CCLayer::create();
- CCSprite *sprite1 = CCSprite::create("Animal_Hd_01.png");
- sprite1->setPosition(ccp(+*,));
- continerLayer->addChild(sprite1);
- CCSprite *sprite2 = CCSprite::create("Animal_Hd_02.png");
- sprite2->setPosition(ccp(+*,));
- continerLayer->addChild(sprite2);
- continerLayer->setAnchorPoint(CCPointZero);
- continerLayer->setPosition(CCPointZero);
- scrollView->setAnchorPoint(CCPointZero);
- scrollView->setPosition(CCPointZero);
- //显示的区域
- scrollView->setViewSize(CCSizeMake(, ));
- scrollView->setContentOffset(CCPointZero);
- continerLayer->setContentSize(CCSizeMake(, ));
- //显示滑动的区域大小 scrollview的实际大小
- scrollView->setContentSize(CCSizeMake(, ));
- scrollView->setContainer(continerLayer);
- //因为要自己实现触摸消息,所以这里设为false ,设置需要滚动的内容
- scrollView->setTouchEnabled(true);
- scrollView->setDirection(kCCScrollViewDirectionHorizontal);
- scrollView->setDelegate(this);
- this->addChild(scrollView);
- //ok,这样的话我们就创建完ScrollView了,但是要想做到好一点的效果还是要做一些其他处理。这里主要是设置滑动之后自动让ScrollView自动调整大小
- this->setTouchEnabled(true);
- return true;
- }
- void testScene::scrollViewDidScroll(cocos2d::extension::CCScrollView *view)
- {
- return;
- }
- void testScene::scrollViewDidZoom(cocos2d::extension::CCScrollView *view)
- {
- return;
- }
- void testScene::adjustScrollView()
- {
- // 关闭CCScrollView中的自调整
- scrollView->unscheduleAllSelectors();
- int x = scrollView->getContentOffset().x;
- //CCLOG("offset=%d",x);
- int offset = (int) x % ;
- // 调整位置
- CCPoint adjustPos;
- // 调整动画时间
- float adjustAnimDelay;
- // 向右滑动是正向左滑动是负
- if (offset < -) {
- // 计算下一页位置,时间
- adjustPos = ccpSub(scrollView->getContentOffset(), ccp( + offset, ));
- adjustAnimDelay = (float) ( + offset) / ;
- }
- else {
- // 计算当前页位置,时间
- adjustPos = ccpSub(scrollView->getContentOffset(), ccp(offset, ));
- // 这里要取绝对值,否则在第一页往左翻动的时,保证adjustAnimDelay为正数
- adjustAnimDelay = (float) abs(offset) / ;
- }
- // 调整位置
- scrollView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);
- }
- void testScene::onEnter()
- {
- CCLayer::onEnter();
- // 这里的第三个参数一定要设置成false,
- // true 即HelloWorld层吞噬掉触摸事件
- // false 即HelloWorld层与CCScrollView对象先后处理触摸事件
- CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, , false);
- }
- //void testScene::registerWithTouchDispatcher()
- //{
- //// 如果需要校对这一步,HelloWorld层是需要实现触摸方法的,而触摸的优先级一定要大于CCScrollView对象(也就是说要CCScrollView对象先响应触摸事件,然后在由HelloWorld层响应),而CCScrollView默认设置的优先级是0,所以HelloWorld需要设置为大于0的值
- // CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, true);
- //}
- bool testScene::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- return true;
- }
- void testScene::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- adjustScrollView();
- }
- void testScene::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
- {
- adjustScrollView();
- }
- /*3.校对
- 这里会有一个问题,那就是当滑动结束时,经常是在两页之间,也就是图2的情况,这种体验不太好,我简单看了一下CCScrollView的源码,发现并没有相关的设置,想必是作者考虑到无法定义每页的大小尺寸,所以没有提供吧!所以,如果需要,我们要额外加一段校对的代码
- 所以在HelloWorld这层,继承了触摸事件的响应方法,并在ccTouchEnded()方法中校对
- 在这里我会根据当前相对于半屏的宽度(240像素)作为判断标准,来决定滑动结束时的所在页
- 这里需要注意的是必须要先关闭CCScrollView的schedule方法,因为CCScrollView在最左边和最右边做了校对,但是对中间的部分没有做校对!*/
CCScrollView的更多相关文章
- 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面
UI 界面一般是游戏里比较独立的地方,因为游戏引擎一般都比较注意基础的功能封装,很少会关注UI,但是 UI 确是玩家第一眼看到的效果,因此能否实现一个美观的UI对于提升游戏的整体美观有着很大的帮助. ...
- cocos2d-x CCScrollView和CCTableView的使用(转载)
转载请注明来自:Alex Zhou的程序世界,本文链接:http://codingnow.cn/cocos2d-x/1024.html //============================== ...
- cocos2dx 2.0 CCScrollView的用法以及滑动的原理
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_N ...
- [cocos2dx]让CCScrollView支持分页
[cocos2dx]让CCScrollView支持分页 做过IOS开发的朋友, 肯定知道UIScrollView有一个isPaged属性. 当设置其为true的时候, 滑动会自动分页. 即, 每次滑动 ...
- CCScrollView/CCTableView(CCTableViewDelegate CCTableViewDataSource CCTableView-滑动列表-游戏中大量使用 非常重要的一个类)
tableview scrollViewDidScroll函数中有一段 ---- 即---滑动tableview时触发的函数 : 会将全部显示的cell又一次刷新(刷新函数中调用了自己定义的ta ...
- CCScrollView 实现帮助界面、关卡选择
本文出自[无间落叶]:http://blog.leafsoar.com/archives/2013/07-27.html 本文介绍了 CCScrollView 来编写帮助界面和关卡选择界面的方法,在编 ...
- cocos2d-x CCScrollView
转自:http://www.cnblogs.com/dcxing/archive/2012/12/31/2840217.html ScrollView一般用在游戏的关卡选择这种类似的场景还有帮助这种场 ...
- Cocos2d-x滚动列表具体解释(CCScrollView的使用)
今天要写一个滚动列表功能,类似以下这样.(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似 ...
- Cocos2d—X游戏开发之CCScrollView(滑动视图)(十二)
CCScrollView在Cocos2d-X引擎中主要使用在图片尺寸远大于屏幕尺寸的时候使用. 总体来说,使用起来比较简单. 一个是CCScrollView控件本身,一个是CCScrollViewDe ...
- cocos2d-x中的CCScrollView滑动体验不佳
在最近的项目中,使用了Cocos2d-x (2.2.0版本)提供的CCScrollView来拖动一个比较大的画面,但是发现滑动体验非常不佳, 手指离开屏幕后,滑动没有惯性,一个不算太大的画面,要滑动好 ...
随机推荐
- 【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器
本章介绍保活定时器. 在 TCP 的三握四挥 章节中,我们介绍了 处在 TIME_WAIT 的 2MSL定时器:在 TCP的超时与重传 章节中,我们介绍了 重传定时器:在上一章节中,我们介绍了 防止死 ...
- HDU 5877 Weak Pair(树状数组+dfs+离散化)
http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...
- PHPStorm默认在新窗口打开
这个设置很实用.
- 《F4+2团队项目需求改进与系统设计》
任务一 a.分析<动态的太阳系模型项目需求规格说明书>初稿的不足. 任务概述描述的有些不具体,功能的规定不详细,在此次作业进行了修改. b.参考<构建之法>8.5节功能的定位和 ...
- Codeforces 912E - Prime Gift
912E - Prime Gift 思路: 折半枚举+二分check 将素数分成两个集合(最好按奇偶位置来,保证两集合个数相近),这样每个集合枚举出来的小于1e18的积个数小于1e6. 然后二分答案, ...
- Python requests快速上手
Python requests快速上手 这里参考官方文档,在ide中写了一遍,加深一下印象,定义的函数只是为了方便区分不同的请求方式 #-*-coding:utf-8-*- # Time:2017/1 ...
- temp table
在Oracle8i或以上版本中,可以创建以下两种临时表: 1.会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column spec ...
- [.NET开发] C#实现剪切板功能
C#剪切板 Clipboard类 我们现在先来看一下官方文档的介绍 位于:System.Windows.Forms 命名空间下 Provides methods to place data on an ...
- [.NET开发] C# 如何在PDF文档中创建表格
表格能够直观的传达数据信息,使信息显得条理化,便于阅读同时也利于管理.那在PDF类型的文档中如何来添加表格并且对表格进行格式化操作呢?使用常规方法直接在PDF中添加表格行不通,那我们可以在借助第三方组 ...
- 单细胞 RNA-seq 10X Genomics
单细胞流程跑了不少,但依旧看不懂结果,是该好好补补了. 有些人可能会误会,觉得单细胞的RNA-seq数据很好分析,跟分析常规的RNA-seq应该没什么区别.今天的这篇文章2015年3月发表在Natur ...