在项目开发中,我们做的大地图,一个手指头按下滑动可以拖动大地图,两个手指头按下张开或者闭合,可以放大和缩小地图

在实现这个功能的时候,需要使用到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开发笔记:多点触控的更多相关文章

  1. Android开发实例之多点触控程序

    智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲 ...

  2. windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放

    http://blog.csdn.net/wangrenzhu2011/article/details/7732907 (转) 实现方法: 对Manipulation进行抽象化 使不同容器可共用多点缩 ...

  3. 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

    前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...

  4. [示例] Firemonkey OnTouch 多点触控应用

    说明:Firemonkey OnTouch 多点触控应用,可同时多指移动多个不同控件 原码下载:[原创]TestMultitouchMove_多点触控应用_by_Aone.zip 运行展示:

  5. Cocos2dx 多点触控

    1 最容易忽略的东西,对于ios平台,须得设置glView的属性: [__glView setMultipleTouchEnabled:YES]; 2 如果调用CCLayer的方法setTouchEn ...

  6. Android多点触控技术实战,自由地对图片进行缩放和移动

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果, ...

  7. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  8. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  9. (一)自定义ImageView,初步实现多点触控、自由缩放

    真心佩服那些一直专注于技术共享的大神们,正是因为他们无私的分享精神,我才能每天都有进步.近日又算是仔细学了android的自定义控件技术,跟着大神的脚步实现了一个自定义的ImageView.里面涉及到 ...

随机推荐

  1. SPOJ 4487 Splay 基本操作

    插入操作,删除操作和置换操作都是单点的,所以不需要lazy标记.这个很简单,都是两次RotateTo,一次Splay操作就搞定. 求最大连续字段和的操作和线段树的题目类似,只需要保存最左边的连续最大字 ...

  2. xcode7 app loader error itms 90168

    . $ cd ~/.itmstransporter   . $ rm update_check*   . $ mv softwaresupport softwaresupport.bak   . $  ...

  3. 动态设置uitableview高度,参考

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { //  ...

  4. linux内核分析之进程地址空间管理

    1.struct task_struct 进程内核栈是操作系统为管理每一个进程而分配的一个4k或者8k内存大小的一片内存区域,里面存放了一个进程的所有信息,它能够完整的描述一个正在执行的程序:它打开的 ...

  5. NOI2015考试小结

    这次NOI2015有幸获得金牌考进了国家集训队,意味着我的OI退役时间既省选之后有延迟了好几个月,又有了新的目标吧. 先说一下考试之外的感受吧,学军宿舍很牛X,接待NOIers而不提供插座,唯一可以用 ...

  6. 团体程序设计天梯赛-练习集L1-009. *N个数求和

    L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...

  7. Ubuntu环境下手动配置Java环境

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  8. SQLite入门与分析(四)---Page Cache之事务处理(3)

    写在前面:由于内容较多,所以断续没有写完的内容. 11.删除日志文件(Deleting The Rollback Journal)一旦更改写入设备,日志文件将会被删除,这是事务真正提交的时刻.如果在这 ...

  9. Sequel Pro 免费的MySQL管理客戶端(有SSH部分)

    官方站點:http://www.sequelpro.com Sequel Pro 的原名是 CocoaMySQL,是一个与 phpMyAdmin 類似的 MySQL 管理工具.它是由 Cocoa 和面 ...

  10. 支付标记化(Tokenization)技术

    道客巴巴->支付标记化(Tokenization)技术介绍 百度文库->中国银联支付标记化技术指引 NFC产业网->银联技术专家解答支付标记化Token技术 百度搜索->Tok ...