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来拖动一个比较大的画面,但是发现滑动体验非常不佳, 手指离开屏幕后,滑动没有惯性,一个不算太大的画面,要滑动好 ...
随机推荐
- echart折线图,柱状图,饼图设置颜色
转载: 之前在做报表的时候用过echart 用完也就完了,而这次在用的时候已经忘了,所以这里简单记录一下,好记性不如烂笔头!!! 1.折线图修改颜色: xAxis: { type: 'category ...
- junit中test注解测试使用案列解析一
本文原创,转载请注明出处 在写代码的过程中,只想测试部分代码,调试一小段功能有没有通的情况下,可以用该方法: 以下为在项目中测试一个小功能的案例,在此记录一下, /** * <解析查询磁 ...
- NOI 4977 怪盗基德的滑翔翼(LIS)
http://noi.openjudge.cn/ch0206/4977/ 描述: 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯.而他最为突出的地方,就是他每次都能逃脱中村警部的重重围 ...
- setSupportActionBar()方法报错
在Android开发中,使用ToolBar控件替代ActionBar控件,需要在java代码中使用setSupportActionBar()方法,如下: Toolbar toolbar = (Tool ...
- 【BZOJ】 3238: [Ahoi2013]差异
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3238 求:$${\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}len ...
- python 进程队列
#_*_coding:utf-8_*_ from multiprocessing import Process,Queue import os,time def f(q,n): q.put([n,'h ...
- 《Blue_Flke》团队项目软件系统设计改进
团队项目系统设计改进: 1.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容 在上一次的项目系统设计说明书中没有很好的完成软件系统结构模型的建模设计,只做了基本的系统项目原型模型 ...
- js 中的几个假值
1. 使用场景 if分支语句 / 短路语句while循环语句for里的第二个语句 2. 6个假值 (都属于 原始类型数据的一部分内容,非原始类型即对象都是真值,如:对象.数组.正则.函数 . ...
- Codeforces 614E - Necklace
614E - Necklace 思路:如果奇数超过1个,那么答案是0:否则,所有数的gcd就是答案. 构造方案:每个数都除以gcd,如果奇数个仍旧不超过1个,找奇数个那个在中间(如果没有奇数默认a), ...
- AMD,CMD.CommonJs和UMD还有es6的模块化对比
CommonJS CommonJS是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行, ...