zoukankan      html  css  js  c++  java
  • cocos2d CCLayer 触摸相关

    要让一个  CCLayer 能够接受触摸输入  需要进行如下设置: [selfsetTouchEnabled:YES];

    cocos2d-x提供了两种触摸事件处理机制, 分别是CCStandardTouchDelegate 和 CCTargetedTouchDelegate。

    CCStandardTouchDelegate包含四个回调函数,分别如下:

         virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)   处理用户按下事件

         virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)   处理Touch Move 事件

        virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)    处理用户放开事件

        virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent)  处理Touch被打断事件,如来电话了。

    在用户注册了一个CCStandardTouchDelegate之后, 所有的触摸事件都会回调到用户自己定义的CCStandardTouchDelegate。

    CCTargetedTouchDelegate 包含下面四个回调函数:

     virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)       处理用户按下事件,若用户需要继续处理该按下对应的后续事件,则return true, 否则,return false.

     virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)       处理Touch Move 事件

    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)        处理用户放开事件

     virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)   处理Touch被打断事件.

    CCTargetedTouchDelegate 和 CCStandardTouchDelegate 有很大的区别。

    第一,CCTargetedTouchDelegate 回调里的参数接收的不是Touch事件及集合(CCSet),而是单个的Touch事件,cocos2d-x会将多点触摸拆散成单个的Touch事件再进行回调。

    第二,用户必须实现ccTouchBegan 函数,且如果某个用户按下消息需要继续跟踪,则ccTouchBegin返回true, 否则,ccTouchMove等接口不会被调用到。

    第三,用户在注册TargetTouchDelegate的时候可以设置bSwallowsTouches标识,若某个TargetTouchDelegate将该标识设为true,且需要处理某个Touch事件(ccTouchBegan返回true),则调到该Delegate之后cocos2d-x不会将Touch消息发送给其他的TargetTouchDelegate和StandardTouchDelegate。

    如果需要实现 CCTargetedTouchDelegate ,则需要调用如下函数

     -(void) registerWithTouchDispatcher

    {

        CCTouchDispatcher *touchDispatcher = [[CCDirector sharedDirector] touchDispatcher];

        [touchDispatcher addTargetedDelegate:self

                                    priority:kCCMenuHandlerPriority -1

                             swallowsTouches:YES];

    }

    通过 如下代码,可以实现坐标的转换

        CGPoint pt = [touch locationInView:[touch view]];

        pt = [[CCDirectorsharedDirector] convertToGL:pt];

     

     

     

    如果实现CCTargetedTouchDelegate,则不能出现以上函数

  • 相关阅读:
    使用T4为数据库自动生成实体类
    asp.net 下OnClientClick的妙用
    使用缓存的9大误区(上)
    使用缓存的9大误区(下)
    毕业后的五年拉开大家差距的原因在哪里
    mysql字符集
    redhat网络基础配置
    mysql远程连接问题
    Hibernate hql语句修改部分字段
    JQuery使用方法总结
  • 原文地址:https://www.cnblogs.com/rollrock/p/3567826.html
Copyright © 2011-2022 走看看