开启多点触摸


一.ios上的多点触摸

        现在很多游戏都有多点触摸,它能让玩家有更好的体验。
        要开启多点触摸,必须在工程的ios目录下的AppController(AppDelegate)文件中添加代码。

        在didFinishLaunchingWithOptions函数中添加 [__glView setMultipleTouchEnabled:YES]; 即可。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    // Init the EAGLView
    EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
                                     pixelFormat: kEAGLColorFormatRGB565
                                     depthFormat: GL_DEPTH24_STENCIL8_OES
                              preserveBackbuffer: NO
                                      sharegroup: nil
                                   multiSampling: NO
                                 numberOfSamples: 0];
    // 加上下面这句话就可以进行多点触摸了
    [__glView setMultipleTouchEnabled:YES];

    // …………………
	
    Return YES;
}

         这样多点触摸就可以成功进行了。

二.android上的多点触摸

       android上的多点触摸不需要像ios上的多点触摸那样需要在底层添加代码,它可以直接使用。

       但是,有一个需要注意的地方。在多个手指刚刚接触屏幕调用ccTouchesBegan的时候,pTouches->count() 的值永远不是大于等于2,而永远是1。所以此时不能直接判断触点是否大于等于2,而应该用for或者while来循环pTouches进行计算才可以。

三.关于CCStandardTouchDelegate和CCTargetedTouchDelegate
CCStandardTouchDelegate
       将所有的Touch信息直接传递给实现该协议的对象,可以处理当前屏幕触摸的每个触摸点,好像最多是十个吧。Standard这套协议,他会按照优先级给每个层排序。然后把touch按照顺序分别传进去,也就是说从上到下的所有层 只要开启了self.istouchenabled = YES 那么他们都会收到touch,而且不可以吃掉该事件。测试显示即使上面一层相应了该事件,它仍然会传递到下一层。我们的问题就来了,Standard协议无法吃掉事件,也许多个层都会相应的时候会出问题,而研究target协议实现的源码,也可以发现其实吃掉一个事件很简单,只要在Touch的集合中执行removeObject方法即可。
CCTargetedTouchDelegate
        要求实现该代理的类一次只能处理一个事件,并且吃掉该事件,不再传播。targeted这套协议只支持单点触控,即使是多点触控也当单点触控来用,但是返回的UITouch就不知道是哪个了。他的好处是有swallow选项,即可判断是否继续传递 touch,而且,他的cctouchbegan函数是个bool值,如果你不返回一个yes的话,后面的 move 和 ended 都不会执行,如果要使用该协议,要在layer中手动设定代理:addStandardDelegate。因为CCLayer内部只注册标准代理。

两个层同时显示:一个用CCStandardTouchDelegate,另一个用CCTargetedTouchDelegate
当两个层同时显示时,且一个用CCStandardTouchDelegate多点触摸,另一个层用CCTargetedTouchDelegate单点触摸,那么当玩家点击屏幕时,CCTargetedTouchDelegate单点会先响应,至于CCStandardTouchDelegate响应与否,要看CCTargetedTouchDelegate是否把触点吞噬。如果触点没有被CCTargetedTouchDelegate吞噬,那么CCStandardTouchDelegate可以响应,否则不可以响应。
CCMenu继承了CCLayer,但是它注册的是targeted协议,所以我们很少发现CCMenu的混乱,因为它会将touch吃掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值