coco2d-x touch事件

来源:互联网 发布:村淘宝服务站怎样赚钱 编辑:程序博客网 时间:2024/05/20 17:10
CCStandardTouchDelegate 默认事件virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);处理按下事件virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);处理按下并移动事件virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);处理松开事件virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);处理打断事件CCTargetedTouchDelegatevirtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);处理用户按下事件,true表示继续处理, 否则false.virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);处理按下并移动事件virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);处理松开事件virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);处理打断事件

两者的区别: CCSet 与 CCTouch ,一个事件集合一个单个事件。

事件分发的顺序: CCTargetedTouchDelegate → CCStandardTouchDelegate 。

默认情况下所有 CCLayer 都没有启用触摸事件,需要 this->setIsTouchEnabled(true); 启用。

如需更改事件: void registerWithTouchDispatcher(void) {}

class MyLayer: public cocos2d:CCLayer {public:    virtual void registerWithTouchDispatcher(void);    // addStandardDelegate()    virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);    virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);    virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);    virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);    // addTargetedDelegate()    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);}void MyLayer::registerWithTouchDispatcher(void) {    // 委托,优先级    CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this, kCCMenuTouchPriority);    // 委托,优先级,是否继续处理    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, kCCMenuTouchPriority, true);    // 2.0版本以后    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, kCCMenuHandlerPriority);    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority, true);}

利用 ccTouchBegan 或 ccTouchesBegan 加以实现点击的回调

void MyLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) {    // 单点    CCTouch *pTouch = (CCTouch*)(pTouches->anyObject());    // 所有点    for(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++) {        CCTouch *pCurTouch =  (CCTouch*)(*iterTouch);    }    // 获取点在视图中的坐标(左上角为原点)    CCPoint touchLocation = pTouch->getLocationInView();    // 把点的坐标转换成OpenGL坐标(左下角为原点)    touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation);    // 把OpenGL的坐标转换成CCLayer的坐标    CCPoint local = convertToNodeSpace(touchLocation)    // 大小为100x100,坐标为(0, 0)的矩形    CCRect * rect = CCRectMake(0, 0, 100, 100);    // 判断该坐标是否在rect矩形内    bool flag = rect.containsPoint(local)    if(flag) {        // 回调    } else {        // 不执行    }}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿吃母乳咳嗽怎么办 小孩呛到了咳嗽怎么办 婴儿喝水呛着怎么办 婴儿吃药呛到了怎么办 新生儿用奶瓶喝奶呛着怎么办 新生儿喝水呛到怎么办 宝宝吃奶呛到了怎么办 羔羊高烧不退怎么办 小孩晚上咳嗽厉害怎么办 婴儿经常呛咳怎么办 新生儿3小时喂奶怎么办 宝宝不会吸奶怎么办 4岁宝宝打呼噜怎么办 宝宝感冒拒奶怎么办 新生儿吸奶无力怎么办 吃奶小牛肚子胀怎么办 新生儿吃奶后打嗝怎么办 新生儿吃多漾奶怎么办 婴儿总是睡不熟怎么办 新生儿不不吃奶怎么办 学生沉迷网络游戏班主怎么办 手机用不了卡怎么办 手机变竖屏怎么办 游戏不支持分屏怎么办 服装设计做到没思路怎么办 眼睛变单眼皮了怎么办 换手机号银行卡绑定怎么办 麦当劳mdp改版了怎么办 摆摊做小吃下雨怎么办 cad2014画图很卡怎么办 头皮有毛囊虫怎么办 头发上的毛囊炎怎么办 狗笼子里面拉屎怎么办 地图鱼起白点怎么办 初中学不好高中怎么办 初中孩子英语不好怎么办 初中孩子数学不好怎么办 万能声卡声音小怎么办 营业执照显示经营异常怎么办 暑假教育培训证怎么办 账套引入失败怎么办