Cocos2d-x中判断点击命中的几种方法
2013-11-07 16:09
267 查看
文字转载于:http://blog.sina.com.cn/s/blog_4458fdda0101g0xr.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=%.1f\n", 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=%.1f\n", touchPoint.x, touchPoint.y); return true; } return false; } //______________________________________________________________________________________________ //用自己的坐标系相对于锚点进行判断 bool CTestLayer::checkTouchInSelf_AR(CCTouch *touch) { //方案二 //将点击点转换成自己坐标系中的坐标,相对于锚点 CCPoint ptAR = convertTouchToNodeSpaceAR(touch); printf("ptAR.x=%.1f ptAR.y=%.1f\n", 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=%.1f\n", 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=%.1f\n", pt.x, pt.y); //得到自己在父元素坐标系中的位置范围 CCRect rect=boundingBox(); printf("rect.l=%.1f, rect.b=%.1f, rect.r=%.1f, rect.t=%.1f\n",\ rect.getMinX(), rect.getMinY(), rect.getMaxX(), rect.getMaxY()); //判断是否点击落在自己的范围当中, 以上判断全是在父元素坐标系中进行计算 if(rect.containsPoint(pt)) { printf("ccTouchBegan x=%.1f y=%.1f\n", touchPoint.x, touchPoint.y); return true; } return false; }
相关文章推荐
- Cocos2d-x中判断点击命中的几种方法
- Cocos2d-x中判断点击命中的几种方法
- Cocos2d-x中判断点击命中的几种方法
- cocos2d-x 判断点击命中坐标的几种方法
- cocos2d坐标系转换与判断点击命中的方法
- PHP中判断变量为空的几种方法
- 判断素数的几种方法
- IOS 点击空白区隐藏键盘的几种方法
- IOS7 点击空白处隐藏键盘的几种方法(原文链接http://www.tmdbug.com/ui/34.html)
- 判断端口通不通的几种方法
- 如何判断程序是否重复运行的几种方法
- C#判断字符串为空的几种方法和效率判断
- jquery判断是否的几种方法
- 经常使用的几种判断手机端或PC端的方法
- 转:Flex判断数据类型的几种方法
- javaScript 中几种防止连续点击的方法总结(持续更新)
- 判断质数的几种方法
- jQuery 判断 checkbox 是否被选中的几种方法
- iOS 基础类解析 - NSCharacterSet___开发中判断空字符串的几种方法
- PHP判断远程url是否有效的几种方法小结