cocos2d-x中的多点触摸的问题

设计到坐标转换问题,cocos2dx里有几种坐标系:UI坐标系、GL坐标系、本地坐标系和世界坐标系:

UI坐标系:以屏幕的左上角为原点,X坐标向左为正,Y坐标向下为正,一些touch事件获取到的坐标就是以这个坐标系为标准的。

GL坐标系:也就是openGL坐标系,以屏幕的左下角为原点,X坐标向左为正,Y坐标向上为正,cocos2dx引擎底层是openGL,也用这个坐标系,一些控件的添加或设置是以这个坐标系为准的。

本地坐标系:子节点的左下角相对于父节点左下角的坐标,也就是以父节点的左下角为坐标原点,X坐标向左为正,Y坐标向上为正。boundingBox 方法获取到的节点的rect的坐标就是这个坐标。

cocos2dx提供了一些方法来实现不同坐标系的转换,其实cocos2dx也提供了直接从触摸点的参数里获取GL坐标。

ccTouchesMoveed方法实现如下:

复制代码
 1 void HeroLayer::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
 2 {
 3     /*
 4      *    坐标系统
 5      *  cocos2dx坐标系统(opengl坐标系统):以左下角为原点
 6      *  UI坐标系统(绘图坐标系统、纹理坐标系统):以左上角为原点
 7      */
 8 
 9     //hero是否还活着  
10     if(this->m_IsHeroLive)
11     {  
12         /*
13          *    触摸事件获取坐标的几个方法
14          *
15          *  getLocation:获取触摸时第一点的cocos2dx 坐标
16          *  getPreviousLocation 获取触摸时最后一点 cocos2dx 坐标
17          *  getLocationInView 获取触摸时第一点的UI坐标
18          *  getPreviousLocationInView 获取触摸时的最后一点 UI坐标
19          */
20         
21         CCTouch *touches = (CCTouch*)pTouches->anyObject();
22  
23         CCPoint beginPoint = touches->getLocation();//获取触摸坐标(cocos2dx坐标系统的)
24 
25         CCRect planeRect = this->m_Hero->boundingBox();//获取飞机当前位置形状位置  
26     
27         //允许稍微加大一点触摸位置,游戏实际需要  
28         //planeRect.origin.x -= 15;  
29         //planeRect.origin.y -= 15;  
30         //planeRect.size.width += 30;  
31         //planeRect.size.height += 30;
32 
33         if(planeRect.containsPoint(beginPoint))
34         {   
35             CCPoint endPoint = touches->getPreviousLocation();//获取触摸的前一个位置  
36             HeroLayer::moveHero(endPoint); //移动飞机  
37         }   
38     }  
39 }



在cocos2d-x中,对于触摸事件有两种模式:

大家都知道,第一种为

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);//添加触摸委托,

也是cclayer默认的模式,可用于多点触摸;

第二种为

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetDelegate(this, 0);//添加触摸委托,

它将会把多点拆为单点进行传递


现在要说的是第一种,要实现多点触摸,

首先得设置几个关键的地方

1。setTouchEnabled(true);  //允许触摸

2。CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);//添加触摸委托,

3。也是比较隐蔽的,

在默认的ios目录下的AppController.mm文件里,

设置 [__glView setMultipleTouchEnabled:YES];   //设置多点触摸关键部位;

如果不设置此处,程序将依然知响应单点触摸。

现在就可以显示多点触摸了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值