【2014-01-26】cocos2dx学习笔记:触摸响应
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2014-01-26 标题cocos2dx学习笔记触摸响应分类编程 / C C / cocos2dx 标签cocos2dx·事件响应cocos2dx学习笔记触摸响应cocos2dx事件响应源码摘录CCLayer关于事件响应的代码CCTouchDispatcher最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo忙了半个星期一边学习一边开发总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。cocos2dx事件响应源码摘录基于版本2.2.1代码版权属于cocos原作者。CCLayer关于事件响应的代码setTouchEnabledvoidCCLayer::setTouchEnabled(boolenabled){if(m_bTouchEnabled!enabled){m_bTouchEnabledenabled;if(m_bRunning){if(enabled){//注册事件响应this-registerWithTouchDispatcher();}else{//去除注册事件响应// have problems?CCDirector::sharedDirector()-getTouchDispatcher()-removeDelegate(this);}}}}registerWithTouchDispatchervoidCCLayer::registerWithTouchDispatcher(){CCTouchDispatcher*pDispatcherCCDirector::sharedDirector()-getTouchDispatcher();// Using LuaBindingsif(m_pScriptTouchHandlerEntry){//lua相关先略去。。。。。}else{//从此处可以发现TouchMode和TouchPriority可以决定注册事件响应的类型。//而Mode和Priority可以通过get/set设置。if(m_eTouchModekCCTouchesAllAtOnce){pDispatcher-addStandardDelegate(this,0);}else{pDispatcher-addTargetedDelegate(this,m_nTouchPriority,true);}}}//TouchMode的枚举定义如下:typedefenum{kCCTouchesAllAtOnce,kCCTouchesOneByOne,}ccTouchesMode;//get set 如下voidCCLayer::setTouchMode(ccTouchesMode mode){if(m_eTouchMode!mode){m_eTouchModemode;if(m_bTouchEnabled){setTouchEnabled(false);setTouchEnabled(true);}}}voidCCLayer::setTouchPriority(intpriority){if(m_nTouchPriority!priority){m_nTouchPrioritypriority;if(m_bTouchEnabled){setTouchEnabled(false);setTouchEnabled(true);}}}intCCLayer::getTouchPriority(){returnm_nTouchPriority;}intCCLayer::getTouchMode(){returnm_eTouchMode;}代码看到此处根据前文【 cocos2dx学习笔记吞噬事件相应 】提到的方法也可以使用下面代码//CCDirector::sharedDirector()-getTouchDispatcher()-addTargetedDelegate(this, -210, true);this-setTouchPriority(-210);this-setTouchMode(kCCTouchesOneByOne);this-setTouchEnabled(true);CCTouchDispatchervoidCCTouchDispatcher::touches(CCSet*pTouches,CCEvent*pEvent,unsignedintuIndex){CCAssert(uIndex0uIndex4,);CCSet*pMutableTouches;m_bLockedtrue;// optimization to prevent a mutable copy when it is not necessaryunsignedintuTargetedHandlersCountm_pTargetedHandlers-count();unsignedintuStandardHandlersCountm_pStandardHandlers-count();boolbNeedsMutableSet(uTargetedHandlersCountuStandardHandlersCount);pMutableTouches(bNeedsMutableSet?pTouches-mutableCopy():pTouches);structccTouchHandlerHelperDatasHelperm_sHandlerHelperData;//// process the target handlers 1st//if(uTargetedHandlersCount0){CCTouch*pTouch;CCSetIterator setIter;for(setIterpTouches-begin();setIter!pTouches-end();setIter){pTouch(CCTouch*)(*setIter);CCTargetedTouchHandler*pHandlerNULL;CCObject*pObjNULL;CCARRAY_FOREACH(m_pTargetedHandlers,pObj){pHandler(CCTargetedTouchHandler*)(pObj);if(!pHandler){break;}boolbClaimedfalse;if(uIndexCCTOUCHBEGAN){bClaimedpHandler-getDelegate()-ccTouchBegan(pTouch,pEvent);//如果该触摸began返回true说明handler开始处理这个事件但是不代表handler要吞噬这个事件if(bClaimed){pHandler-getClaimedTouches()-addObject(pTouch);}}else//经过测试发现当一个触摸事件生成之后从began,到end和cancel都是同一个对象。if(pHandler-getClaimedTouches()-containsObject(pTouch)){// moved ended canceledbClaimedtrue;switch(sHelper.m_type){caseCCTOUCHMOVED:pHandler-getDelegate()-ccTouchMoved(pTouch,pEvent);break;caseCCTOUCHENDED:pHandler-getDelegate()-ccTouchEnded(pTouch,pEvent);pHandler-getClaimedTouches()-removeObject(pTouch);break;caseCCTOUCHCANCELLED:pHandler-getDelegate()-ccTouchCancelled(pTouch,pEvent);pHandler-getClaimedTouches()-removeObject(pTouch);break;}}if(bClaimedpHandler-isSwallowsTouches()){if(bNeedsMutableSet){pMutableTouches-removeObject(pTouch);}//注意这里的break如果目标触摸被响应而且被设置吞噬那么直接跳出内层循环后续handler均不能响应这个触摸。break;}}}}//// process standard handlers 2nd////当目标触摸全部结束之后将挑剩下的touch事件一次性丢给标准触摸相应。if(uStandardHandlersCount0pMutableTouches-count()0){CCStandardTouchHandler*pHandlerNULL;CCObject*pObjNULL;CCARRAY_FOREACH(m_pStandardHandlers,pObj){pHandler(CCStandardTouchHandler*)(pObj);if(!pHandler){break;}switch(sHelper.m_type){caseCCTOUCHBEGAN:pHandler-getDelegate()-ccTouchesBegan(pMutableTouches,pEvent);break;caseCCTOUCHMOVED:pHandler-getDelegate()-ccTouchesMoved(pMutableTouches,pEvent);break;caseCCTOUCHENDED:pHandler-getDelegate()-ccTouchesEnded(pMutableTouches,pEvent);break;caseCCTOUCHCANCELLED:pHandler-getDelegate()-ccTouchesCancelled(pMutableTouches,pEvent);break;}}}if(bNeedsMutableSet){pMutableTouches-release();}//// Optimization. To prevent a which is expensive// the add/removes/quit is done after the iterations//m_bLockedfalse;。。。。。。 。。。。。。}

相关新闻

GET与POST请求:核心区别与最佳实践指南

GET与POST请求:核心区别与最佳实践指南

1. HTTP请求方法概述 HTTP协议作为万维网数据通信的基础,定义了客户端与服务器交互的不同方式。其中最常用的两种请求方法就是GET和POST,它们构成了Web开发的基石。理解这两种方法的本质区别,是每一位Web开发者必须掌握的核心知识。 从技术实…

2026/7/18 13:08:03阅读更多 →
Laravel框架启动流程与性能优化实践

Laravel框架启动流程与性能优化实践

1. Laravel框架启动流程全景概览 作为PHP领域最受欢迎的现代化框架,Laravel的启动机制一直是开发者深入理解框架运作的关键切入点。当我们在public/index.php中写下那几行看似简单的代码时,背后其实隐藏着一套精密的初始化体系。不同于传统PHP应用的直来…

2026/7/18 13:03:02阅读更多 →
如何在5分钟内搭建终极自托管游戏串流系统:Sunshine完全指南

如何在5分钟内搭建终极自托管游戏串流系统:Sunshine完全指南

如何在5分钟内搭建终极自托管游戏串流系统:Sunshine完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想象一下,在客厅的沙发上用电视玩PC游戏大作&a…

2026/7/18 13:03:02阅读更多 →
Win10系统性能优化:8个关键设置提升运行速度

Win10系统性能优化:8个关键设置提升运行速度

1. 项目概述刚装完Win10系统时那种丝滑流畅的感觉,用着用着就消失了?这很可能是因为系统默认开启了一些"吃性能"的后台服务。作为一名从业十年的IT运维工程师,我见过太多因为系统默认设置导致电脑越用越卡的案例。今天要分享的这8个…

2026/7/18 14:13:07阅读更多 →
3分钟快速配置PvZ Toolkit:植物大战僵尸PC版终极修改器完全指南

3分钟快速配置PvZ Toolkit:植物大战僵尸PC版终极修改器完全指南

3分钟快速配置PvZ Toolkit:植物大战僵尸PC版终极修改器完全指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 想要让经典的植物大战僵尸游戏焕发新生?PvZ Toolkit正是你需…

2026/7/18 14:13:07阅读更多 →
FigmaCN终极指南:3分钟免费解锁中文Figma界面,设计师效率提升80%

FigmaCN终极指南:3分钟免费解锁中文Figma界面,设计师效率提升80%

FigmaCN终极指南:3分钟免费解锁中文Figma界面,设计师效率提升80% 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾经因为Figma的英文界面而感到困惑&…

2026/7/18 14:13:07阅读更多 →
如何让Windows资源管理器显示HEIC缩略图:iPhone用户的终极解决方案

如何让Windows资源管理器显示HEIC缩略图:iPhone用户的终极解决方案

如何让Windows资源管理器显示HEIC缩略图:iPhone用户的终极解决方案 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你…

2026/7/18 14:13:07阅读更多 →
FydeOS无损安装指南:让老旧电脑重获新生

FydeOS无损安装指南:让老旧电脑重获新生

1. 闲置电脑焕新方案:FydeOS无损安装指南 十年前的老电脑跑不动Windows 10/11?先别急着挂闲鱼!实测通过FydeOS系统能让4GB内存的联想Y470笔记本流畅运行Chrome浏览器、WPS办公三件套和哔哩哔哩网页版。这个基于ChromiumOS的国产轻量系统&…

2026/7/18 14:13:07阅读更多 →
OpenCore Legacy Patcher深度解析:让老旧Mac重获新生的神奇工具

OpenCore Legacy Patcher深度解析:让老旧Mac重获新生的神奇工具

OpenCore Legacy Patcher深度解析:让老旧Mac重获新生的神奇工具 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方抛弃的老旧…

2026/7/18 14:08:07阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/17 13:22:23阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/17 13:22:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →