CCScrollView滚动视图可以让游戏有效果,并能够通过滚动视图切换游戏场景,滚动视图通常用来选择在游戏中的级别

实例1:使用CCScrollView创建一个简单的滚动视图

首先创建一个ScrollView类

然后在ScrollView.h中加入以下的代码

#ifndef __ScrollView_H__
#define __ScrollView_H__ #include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT; class ScrollView : public CCLayer
{
public:
virtual bool init(); static CCScene* scene(); CREATE_FUNC(ScrollView); //响应触摸事件
bool ccTouchBegan(CCTouch* touch, CCEvent*);
void ccTouchEnded(CCTouch* touch, CCEvent*); CCNode* _contaner;
}; #endif // __ScrollView_H__

在ScrollView.cpp中加入以下的代码

#include "ScrollView.h"

CCScene* ScrollView::scene()
{
CCScene *scene = CCScene::create(); ScrollView *layer = ScrollView::create(); scene->addChild(layer); return scene;
} bool ScrollView::init()
{
CCLayer::init(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCPoint center = ccp(winSize.width / 2, winSize.height / 2); //创建一个结点
CCNode* c = CCNode::create(); //创建5个紧挨着的精灵
for(int i = 0; i < 5; i++)
{
CCSprite* sprite = CCSprite::create("HelloWorld.png");
c->addChild(sprite); //设置图片的位置,每两张图片相差一张图片的宽度
sprite->setPosition(ccpAdd(center, ccp(i*winSize.width, 0)));
} //滚动视图
//第一个參数:显示的视图大小
//第二个參数:视图的实际大小
CCScrollView* view = CCScrollView::create(winSize, c);
addChild(view); //设置视图运动的方向为水平运动
view->setDirection( kCCScrollViewDirectionHorizontal); //设置视图的宽度和高度
view->setContentSize(CCSize(winSize.width * 5, winSize.height * 5)); return true;
}

运行结果

实例2:CCScrollView的高级应用

不会出现两张图片的相交位置在窗体中(当切换完毕图片后总会在窗体上显示一张完整的图片)

在ScrollView.cpp中加入以下的代码

#include "ScrollView.h"

CCScene* ScrollView::scene()
{
CCScene *scene = CCScene::create(); ScrollView *layer = ScrollView::create(); scene->addChild(layer); return scene;
} bool ScrollView::init()
{
CCLayer::init(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCPoint center = ccp(winSize.width / 2, winSize.height / 2); //创建一个结点
CCNode* c = CCNode::create(); _contaner = c; //创建5个紧挨着的精灵
for(int i = 0; i < 5; i++)
{
CCSprite* sprite = CCSprite::create("HelloWorld.png");
c->addChild(sprite); //设置图片的位置。每两张图片相差一个屏幕的宽度
sprite->setPosition(ccpAdd(center, ccp(i*winSize.width, 0))); //给视图编号
char buf[10];
sprintf(buf, "%d", i);
CCLabelTTF* label = CCLabelTTF::create(buf, "Arial", 36);
sprite->addChild(label);
label->setPosition(center);
} //滚动视图
//第一个參数:在窗体显示的视图大小
//第二个參数:结点CCNode
CCScrollView* view = CCScrollView::create(winSize, c);
addChild(view); //设置视图运动的方向为水平运动
view->setDirection( kCCScrollViewDirectionHorizontal); //设置视图的宽度和高度
view->setContentSize(CCSize(winSize.width * 5, winSize.height * 5)); //取消ScrollView的弹性
view->setBounceable(false); //注冊触摸事件
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne); return true;
} //鼠标点下的时候
bool ScrollView::ccTouchBegan(CCTouch* touch, CCEvent* ev)
{
return true;
} //鼠标起来的时候
void ScrollView::ccTouchEnded(CCTouch* touch, CCEvent*)
{
//得到鼠标点下去的时候的位置
CCPoint ptDown = touch->getStartLocation(); //得到鼠标松开时的位置
CCPoint ptUp = touch->getLocation(); //当两个位置的距离的平方小于25时(觉得是点击,否则是滑动)
if(ptUp.getDistanceSq(ptDown) <= 25)
{
//检查点击的是哪一个图片
//将世界坐标转换成结点坐标
CCPoint ptInContainer = _contaner->convertToNodeSpace(ptUp); //定义一个数组保存5个精灵
CCArray* arr = _contaner->getChildren(); for(int i = 0; i < 5; ++i)
{
//获取精灵的索引(获取点击的是哪个精灵)
CCSprite* sprite = (CCSprite*)arr->objectAtIndex(i); //boundingBox()获取精灵的边框(推断触摸点是否在边框内,当在的时候。打印精灵的编号)
if(sprite->boundingBox().containsPoint(ptInContainer))
{
CCLog("click i is %d", i);
break;
}
}
}
else
{
//滑动
int x = _contaner->getPositionX(); if (x >= -1920 && x <= 0)
{
// adjust
// 0, -480, -960, -1440, -1920
int idx = (-x +240)/ 480;
x = -idx * 480; CCMoveTo* moveTo = CCMoveTo::create(0.5f, ccp(x, this->_contaner->getPositionY())); this->_contaner->runAction(moveTo);
}
}
}

运行结果:

当在图片中点击后会打印点击的图片的编号

改进后不会出现的情形





版权声明:本文博主原创文章,博客,未经同意不得转载。

Cocos2d-X采用CCScrollView创建滚动视图的更多相关文章

  1. Cocos2d-X 使用CCTableView创建滚动视图

    CCTableView和CCScrollView如创建滚动视图,CCTableView该函数将是更,制造更多麻烦 实例1:使用CCTableView创建滚动视图 首先创建一个TableView类 Ta ...

  2. swift:创建滚动视图的图片轮播器

    用swift创建图片轮播器和用OC创建的方式是一样的,都主要用到UIScrollView和UIImageview这两个控件,有几张图片,就将滚动视图的内容区域大小设置为每一张图片的大小乘以张数即可.然 ...

  3. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  4. cocos2dx基础篇(14) 滚动视图CCScrollView

    [3.x]     (1)去掉 "CC"     (2)滚动方向         > CCScrollViewDirection 改为强枚举 ScrollView::Dire ...

  5. 滚动视图和页面控制UIScollView,UIpageControlDemo

    ////  ViewController.m//  UIScollView////  Created by hehe on 15/9/25.//  Copyright (c) 2015年 wang.h ...

  6. 制作滚动视图(ScrollView)

    怎样判断是否应当使用滚动视图 所谓的滚动视图,是指一个可以滑动的视窗,视窗大小和位置固定不变,视窗内的内容用户可以通过手指滑动或者拖动滚动天来进行滚动浏览. 滚动视图的目的是为了解决同类内容过多,一个 ...

  7. Cocos2d-x学习笔记(14)(更新函数scheduleUpdate、进度计时器CCProgressTo、滚动视图CCScrollView)

    一.scheduleUpdate 1.scheduleUpdate:此函数是CCNode的函数,每一个CCNode仅仅要调用scheduleUpdate更新函数,那么这个CCNode就会响应当前类的u ...

  8. iOS 滚动视图的复用问题解决方案

    LazyScroll是什么 LazyScrollView 继承自ScrollView,目标是解决异构(与TableView的同构对比)滚动视图的复用回收问题.它可以支持跨View层的复用,用易用方式来 ...

  9. 【Android】10.5 滚动视图(RecyclerView)

    分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 滚动视图(RecyclerView)的用法与布局控件的用法类似,唯一不同的是,所有布局控件中都可以包含多个组件,而 ...

随机推荐

  1. VS2012 编译程序时报无法载入PDB文件错误解决方式

    VS2012 编译程序时报无法载入PDB文件错误解决方式 "ConsoleApplication1.exe"(Win32): 已载入"C:\Users\hp\Docume ...

  2. xshell联系CentOS6.5 iptables要么ls 乱码输出

    今天Xshell 联系CentOS6.5.当终端>编码设置为:Unicode(UTF-8)时刻,跑service iptables restart输出是乱码命令:当编码被设置为:当默认语言.ls ...

  3. 採訪The Molasses Flood:BioShock Infinite 游戏之后又一大作

    Xsolla有幸与Flame in the Flood游戏的开发人员之中的一个-----Forrest Dowling进行了採訪,Flame in the Flood这款非常棒的游戏在Kickstar ...

  4. WPF技术触屏上的应用系列(一): 3D 图片(照片)墙、柱面墙(凹面墙或者叫远景墙、凸面墙或者叫近景墙)实现

    原文:WPF技术触屏上的应用系列(一): 3D 图片(照片)墙.柱面墙(凹面墙或者叫远景墙.凸面墙或者叫近景墙)实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...

  5. 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)

    原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...

  6. HDU 3831 DICS

    意甲冠军: 按标题给4操作模式  用最少的次数  离a串行转换b弦 思路: 因为操作仅仅有这4种  所以我们能够确定从头到位去匹配a和b一定是正确的 那么状态数一共同拥有多少呢  一共同拥有lengt ...

  7. 使用WebBrowser,内存一直增加的解决办法

    -- in class definition [DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetS ...

  8. cocos2d-x -- 渠道SDK【棱镜】接入(1)

    棱镜SDK简单介绍 若想让游戏上线,渠道接入步骤是不可缺少的,为了避免一对一接入渠道问题,我选择了棱镜SDK,由于棱镜是游戏与渠道SDK的中间层,为CP厂商屏蔽各个渠道SDK之间的差异,整个接入过程, ...

  9. BZOJ 1901 Dynamic Rankings 树董事长

    标题效果:间隔可以改变k少 我的两个天树牌主席... 隔断Count On A Tree 之后我一直认为,随着树的主席的变化是分域林木覆盖率可持久段树. .. 事实上,我是误导... 尼可持久化线段树 ...

  10. ramoops具体失败原因来解释驱动寄存器

    正在使用linux的ramoops驱动器模块,当编译完成加载.查找驱动程序加载失败.显然,直接用内核代码,为什么会出现这种情况? 第一眼ramoops初始化代码: 180 static int __i ...