转自:http://www.cnblogs.com/jiackyan/archive/2013/04/14/3019893.html
//重载 virtual bool ccTouchBegan(CCTouch *touch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *touch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *touch, CCEvent *pEvent); virtual void onEnter(); virtual void onExit(); //添加支持触摸事件 void CTestLayer::onEnter() { CCLayer::onEnter(); this->setTouchEnabled(true); CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true); } void CTestLayer::onExit() { CCLayer::onExit(); CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); } //////////////////////////////////////////////////////////////////////////////////////////////// //用自己的坐标系相对于原点进行判断 bool checkTouchInSelf(CCTouch *touch); //用自己的坐标系相对于锚点进行判断 bool checkTouchInSelf_AR(CCTouch *touch); //用父元素坐标系及自己在父坐标中的位置进行判断 bool checkTouchInSelf_Parent(CCTouch *touch); //______________________________________________________________________________________________ //用自己的坐标系相对于原点进行判断 bool CTestLayer::checkTouchInSelf(CCTouch *touch) { //方案一 //将点击点转换成自己坐标系中的坐标,相对于0,0点 CCPoint pt = convertTouchToNodeSpace(touch); printf("pt.x=%.1f pt.y=%.1fn", pt.x, pt.y); int nw = getContentSize().width; int nh = getContentSize().height; CCRect rc(0, 0, nw, nh); if(rc.containsPoint(pt)) { //获得点击的OpenGL的世界坐标值 CCPoint touchPoint = touch->getLocation(); printf("ccTouchBegan x=%.1f y=%.1fn", touchPoint.x, touchPoint.y); return true; } return false; } //______________________________________________________________________________________________ //用自己的坐标系相对于锚点进行判断 bool CTestLayer::checkTouchInSelf_AR(CCTouch *touch) { //方案二 //将点击点转换成自己坐标系中的坐标,相对于锚点 CCPoint ptAR = convertTouchToNodeSpaceAR(touch); printf("ptAR.x=%.1f ptAR.y=%.1fn", ptAR.x, ptAR.y); CCPoint pp = this->getAnchorPoint(); int nw = getContentSize().width; int nh = getContentSize().height; int nx = -(nw * pp.x); int ny = -(nh * pp.y); CCRect rcar(nx, ny, nw, nh); if(rcar.containsPoint(ptAR)) { //获得点击的OpenGL的世界坐标值 CCPoint touchPoint = touch->getLocation(); printf("ccTouchBegan x=%.1f y=%.1fn", touchPoint.x, touchPoint.y); return true; } return false; } //______________________________________________________________________________________________ //用父元素坐标系及自己在父坐标中的位置进行判断 bool CTestLayer::checkTouchInSelf_Parent(CCTouch *touch) { //方案三 //获得点击的OpenGL的世界坐标值 CCPoint touchPoint = touch->getLocation(); //将点击的位置转换成父元素坐标系中的相对坐标 CCPoint pt=getParent()->convertToNodeSpace(touchPoint); printf("pt.x=%.1f, pt.y=%.1fn", pt.x, pt.y); //得到自己在父元素坐标系中的位置范围 CCRect rect=boundingBox(); printf("rect.l=%.1f, rect.b=%.1f, rect.r=%.1f, rect.t=%.1fn", rect.getMinX(), rect.getMinY(), rect.getMaxX(), rect.getMaxY()); //判断是否点击落在自己的范围当中, 以上判断全是在父元素坐标系中进行计算 if(rect.containsPoint(pt)) { printf("ccTouchBegan x=%.1f y=%.1fn", touchPoint.x, touchPoint.y); return true; } return false; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述