【原】cocos2d-x开发笔记:多点触控
在项目开发中,我们做的大地图,一个手指头按下滑动可以拖动大地图,两个手指头按下张开或者闭合,可以放大和缩小地图
在实现这个功能的时候,需要使用到cocos2d-x的多点触控功能。
多点触控事件,并不是说你按下了两个手指,执行ccTouchesMoved的时候,pTouches的count为2,这样如果单纯的判断函数传入的参数,实现起来会比较困难。
我用一种方式实现了,感觉还是比较简单明了的,拿出来分享一下
cocos2d-x版本:cocos2d-x 2.2.0
目标平台:ios
1、首先在AppController.mm中设置开启多点触控
[__glView setMultipleTouchEnabled:YES];
2、在HelloWorldScene.cpp中得init函数中开启响应触摸事件
setTouchEnabled(true);
3、重写父类的三个函数
virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent); virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent); virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
4、在类头文件中定义一个CCArray,用来保存CCTouch对象的指针
cocos2d::CCArray* m_touchPoints;
5、在构造函数和析构函数中对CCArray进行初始化retain和release
HelloWorld::HelloWorld()
{
m_touchPoints = CCArray::create();
m_touchPoints->retain();
}
HelloWorld::~HelloWorld(){ m_touchPoints->release(); m_touchPoints = NULL;}
6、当一个手指按下以后,不论是刚按下的时候,调用的ccTouchesBegan,还是滑动的过程中调用的ccTouchesMoved,还是抬起的时候调用ccTouchesEnded,函数的参数都是同一个CCTouch对象。
所以,我们在执行ccTouchesBegan函数的时候,把该对象加入到我们定义的CCArray中,在ccTouchesMoved函数中判断我们自定义的数组的长度,如果是1,就执行拖动地图的动作,如果是2,就执行缩放的动作,更多的动作也都可以灵活的增加
在ccTouchesEnded的时候,在CCArray中移除掉当前的这个CCTouch对象。
void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
//将CCTouch对象加入数组
int count = pTouches->count();
CCSetIterator iter = pTouches->begin();
for (int i=0; i<count; i++) {
CCTouch* pTouch = (CCTouch*)(*iter++);
m_touchPoints->addObject(pTouch);
}
}
void HelloWorld::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
if (m_touchPoints->count() == 1)//移动
{
CCLog("move");
}
else if (m_touchPoints->count() == 2)//缩放
{
CCLog("scale");
}
}
void HelloWorld::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
//将CCTouch对象从数组中移除
int count = pTouches->count();
CCSetIterator iter = pTouches->begin();
for (int i=0; i<count; i++) {
m_touchPoints->removeObject(*iter++);
}
}
本人才疏学浅,如果有哪里写的不对的地方,还请指针,我马上修改!
【原】cocos2d-x开发笔记:多点触控的更多相关文章
- Android开发实例之多点触控程序
智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲 ...
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放
http://blog.csdn.net/wangrenzhu2011/article/details/7732907 (转) 实现方法: 对Manipulation进行抽象化 使不同容器可共用多点缩 ...
- 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介
前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...
- [示例] Firemonkey OnTouch 多点触控应用
说明:Firemonkey OnTouch 多点触控应用,可同时多指移动多个不同控件 原码下载:[原创]TestMultitouchMove_多点触控应用_by_Aone.zip 运行展示:
- Cocos2dx 多点触控
1 最容易忽略的东西,对于ios平台,须得设置glView的属性: [__glView setMultipleTouchEnabled:YES]; 2 如果调用CCLayer的方法setTouchEn ...
- Android多点触控技术实战,自由地对图片进行缩放和移动
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果, ...
- MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件
原文 MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...
- Windows phone 8 学习笔记(1) 触控输入
原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...
- (一)自定义ImageView,初步实现多点触控、自由缩放
真心佩服那些一直专注于技术共享的大神们,正是因为他们无私的分享精神,我才能每天都有进步.近日又算是仔细学了android的自定义控件技术,跟着大神的脚步实现了一个自定义的ImageView.里面涉及到 ...
随机推荐
- WPF多线程演示
WPF中的几种处理线程的工作方式: 1.简单的DispatcherTimer类似Timer控件 2.需要处理UI同步时,Dispatcher DispatcherOpertion 3.增强的Threa ...
- Sqoop 1.99.4 安装
1.安装准备工作:已经装好的 hadoop 环境是 hadoop-2.5.1 64位下载的sqoop安装包(注意是hadoop200)http://www.us.apache.org/dist/sqo ...
- C#...何时需要重写ToString()方法?
一般类型,都是继承自System.Object类,默认情况下,object类的ToString方法会返回当前类的类型的字符串表达形式.但也有例外!! DateTime,它就重写ToString方法,D ...
- HttpClient抓取网页内容简单介绍
版本HttpClient3.1 1.GET方式 第一步.创建一个客户端,类似于你用浏览器打开一个网页 HttpClient httpClient = new HttpClient(); 第二步.创建一 ...
- Linux的安装 CentOS-7.1
说明: 首先,版本:7.1版:CentOS-7-x86_64-Everything-1503-01.iso 下载自:http://mirrors.163.com/centos/7/isos/x86_6 ...
- Linux学习笔记(6)-工作管理
什么是工作管理 工作来自job命令的翻译,job命令可以查看后台工作的进程.举例来说什么是工作管理,当你要打包一个比较大的目录时,很耗时间,但是你同时又需要使用别的命令.你会想我可以到开几个终端进行登 ...
- Delphi XE5 android openurl(转)
直接上代码: unit OpenViewUrl; interface // URLEncode is performed on the URL// so you need to format it p ...
- 【线段树/数学/扩展欧几里得】 Bzoj 3913:奇数国
Description 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜 ...
- 团体程序设计天梯赛-练习集L1-023. 输出GPLT
L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...
- ASP + ACCESS保存图片文件之实现
con.execute "CREATE tblImg (lngId COUNTER PRIMARY KEY, binImg IMAGE)" set ads=createobject ...