【Cocos2d开发】浅析Cocoss2d下的多点触控

新事件分发机制:在2.x 版本事件处理时,将要触发的事件交给委托代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应。而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理,即可完成事件响应。

事件监听器有以下几种:

  • 触摸事件 (EventListenerTouch)
  • 键盘响应事件 (EventListenerKeyboard)
  • 鼠标响应事件 (EventListenerMouse)
  • 自定义事件 (EventListenerCustom)
  • 加速记录事件 (EventListenerAcceleration)

_eventDispatcher的工作由三部分组成:

  • 事件分发器 EventDispatcher
  • 事件类型 EventTouch, EventKeyboard 等
  • 事件监听器 EventListenerTouch, EventListenerKeyboard 等

监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。

这里我们主要来了解Cocos2d3.x版本下的触摸事件中的多点触摸扩大缩放如何实现

[cpp] view plaincopy

  1. void NewScene::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event)    { CCLOG("began"); }
  2. void HelloWorld::onTouchesMoved(const std::vector<Touch *> &touches, cocos2d::Event *event)
  3. {
  4. //多点
  5. if(touches.size() > 1)
  6. {
  7. auto distance1 = touches[0]->getPreviousLocation().distance(touches[1]->getPreviousLocation());
  8. auto distance2 = touches[0]->getLocation().distance(touches[1]->getLocation());
  9. float scale = sprite->getScale() * ( distance2 / distance1);
  10. scale = MIN(2,MAX(0.5, scale));
  11. sprite->setScale(scale);
  12. }
  13. else
  14. {
  15. log("单点");
  16. }
  17. }
  18. void NewScene::onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event)    { CCLOG("End"); }

分发器中注册这四个方法就可以直接实现多点触摸。

OK.于Cocos2d的多点触摸的学习就分享到此,有讲得不对的地方还望指出进行探讨互相学习!

时间: 2024-10-13 06:01:48

【Cocos2d开发】浅析Cocoss2d下的多点触控的相关文章

Cocos2d-x3.2 iOS下开启多点触控

iOS下默认是不开启多点触控的,我们要想要使用需要做如下的内容: iOS文件夹下:AppController.mm 需要加一行代码: // 只需要新增这样一行代码就可以使用多点触控啦. [eaglView setMultipleTouchEnabled:YES]; 具体位置见下面: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

cocos2d3.x在android下屏蔽多点触控

ios上很简单的在AppController.mm里 [eaglView setMultipleTouchEnabled:YES] 设置为NO,就是单点触控了,无需更改cocos底层代码; android上的做法是找到项目所引用的cocos引擎文件: Cocos2dxGLSurfaceView.java,找到onTouchEvent方法,在switch语句里的 MotionEvent.ACTION_POINTER_DOWN MotionEvent.ACTION_DOWN 这两个case 的第一行

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

智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲解多点触控程序的实现. 首先来了解一下Android中多点触控的原理. Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouch技术,对于网页缩放.手势操作上有更好

Cocos2dx 多点触控

1 最容易忽略的东西,对于ios平台,须得设置glView的属性: [__glView setMultipleTouchEnabled:YES]; 2 如果调用CCLayer的方法setTouchEnabled,则不需要手动加touchDelegate,因为这个函数里会自动做这些事情. 3 如果调用CCLayer的方法setTouchEnabled,之前可以调用一个设置多点或单点的函数来控制setTouchEnable的注册行为,这个函数是: setTouchMode 4 也可以直接调用 coc

【原】cocos2d-x开发笔记:多点触控

在项目开发中,我们做的大地图,一个手指头按下滑动可以拖动大地图,两个手指头按下张开或者闭合,可以放大和缩小地图 在实现这个功能的时候,需要使用到cocos2d-x的多点触控功能. 多点触控事件,并不是说你按下了两个手指,执行ccTouchesMoved的时候,pTouches的count为2,这样如果单纯的判断函数传入的参数,实现起来会比较困难. 我用一种方式实现了,感觉还是比较简单明了的,拿出来分享一下 cocos2d-x版本:cocos2d-x 2.2.0 目标平台:ios 1.首先在App

U3D多点触控框架实例(下)

1.概述 上次我们一口气讲到下层组件讲多点触控的消息根据具体的需求,在每个时刻将其抽象画成单一指令. 接下来我们要聊聊,上层组件中如何将单一的指令应用在角色上,让角色在移动,普通攻击和释放技能中间做出正确的行为. 上次我们也说过了,上层组件是个优先级队列,队列中分别有对移动,普通攻击,技能释放的判定检测组件,按照 技能> 普攻 > 移动的优先级,对下层组件传递过来的消息依次,逐个进行处理. 按照这种设计思路,我们首先还是应该有一个接口,统一组建的操作,然后在响应事件的时候对组件for循环处理

Android多点触控MultiTouch浅析

申明: 参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0226/914.html 下面实现如何通过应用层支持多点触控操作,对于常规的控件触控操实现onTouchEvent()方法来处理.同时对onTouchEvent方法的参数MotionEvent进行一些了解. 正文: 下面会用两个应用示例来初步学习一下Android中的多点触控. 示例一(DemoMultiTouch-Canvas): 核心技术介绍 本示例是在Sur

【朝花夕拾】Android自定义View篇之(九)多点触控(下)实践出真知

前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理解本文的代码,需要先掌握上一篇的理论知识,事件处理基础,以及一定的自定义View基础,这些我也在本系列文章的前几篇中讲过,有兴趣的可以按照本系列的顺序依次阅读学习,相信您一定会有不小的收获.. 一.实现单指拖动图片 要实现单指拖动图片,大致思路就是监控手指的ACTION_MOVE事件.手指移动过程中

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

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的.因此本篇文章中,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放. 如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感