转自: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, , 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(, , 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;
}

cocos2d-x 判断点击命中坐标的几种方法的更多相关文章

  1. 【九天教您南方cass 9.1】 09 提取坐标的几种方法

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取测量空间中. [点击索取cass教程]5元立得 (给客服说暗号:“ ...

  2. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  3. 使用c#检测文件正在被那个进程占用 判断文件是否被占用的两种方法

    C# 判断文件是否被占用的三种方法 using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.d ...

  4. Java 判断字符串是否为空的四种方法、优缺点与注意事项

    以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: ...

  5. VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...

  6. Java:判断字符串是否为数字的五种方法

    Java:判断字符串是否为数字的五种方法 //方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str. ...

  7. 判断js中的数据类型的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  8. 转:判断js中的数据类型的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  9. JAVA中判断char是否是中文的几种方法

    1.方法一 char c = 'a'; if((c >= 0x4e00)&&(c <= 0x9fbb)) { System.out.println("是中文&qu ...

随机推荐

  1. JavaBean 内省API BeanUtils工具 泛型 xml xml约束

    1 什么是JavaBean?有何特征? 1)符合特定规则的类    2)JavaBean分二类:     a)侠义的JavaBean         .私有的字段(Field)         .对私 ...

  2. Java之数组array和集合list、set、map

    之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊,直到看到了这篇文章,讲解的很清楚. 世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 ...

  3. nodejs创建express+ejs项目

    很多同学跟着 node.js开发指南 学习用 express+ejs 创建项目的时候,却总是无法成功,如: 运行 以下命令去创建 express+ejs 创建项目 $ express -t ejs m ...

  4. linux 进程间消息队列通讯

    转自:http://blog.csdn.net/lifan5/article/details/7588529 http://www.cnblogs.com/kunhu/p/3608589.html 前 ...

  5. 使用Unity3D自带动画系统制作下雨效果

    之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...

  6. UVa 1572 (拓扑排序) Self-Assembly

    题意: 有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案. 分析: 首先因为可以旋转和反转,所以可以保证在拼接 ...

  7. [HNOI2006]超级英雄Hero

    这题一看就应该知道是二分图匹配…… 我记得有个类似的题有一个并查集的解法,但是我找不到了…… var i,n,m:longint; p:..] of longint; v:..] of boolean ...

  8. RMAN数据库异机迁移

    本文讲述如何用rman将一个库迁移到另一个服务器上. 服务器A:linux es4 + oracle9204 (源)服务器B:linux es4 + oracle9204 (目标) 一.创建目录 为了 ...

  9. JPA---一对一关系

    在JPA中,使用@oneToOne来标示. package com.yl.demo1.bean.oneToone; import javax.persistence.CascadeType; impo ...

  10. MEX文件编写和调试

    作者kaien,2010/02/16 以前我写过一篇文章,详细的介绍过MEX的格式,语法,编译,调试等.可惜记不清放在哪里了.而最近又用到MEX编程,所以只能重新温习一番.时间有限,只记下简要流程和注 ...