`
rayln
  • 浏览: 431369 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ccTouchesBegan 中如何让获取的坐标是相对整个屏幕的坐标,而不是在当前view的坐标

 
阅读更多
ccTouchesBegan 中如何让获取的坐标是相对整个屏幕的坐标,而不是在当前view的坐标
         在cocos2d中,在我们在CCLayer中处理 ccTouchesBegan等类似的touch事件的时候,我们一般用下面的代码来获得当前的用户点击位置:
      
UITouch  *touch=[touches anyObject];  
CGPoint  touchLocation= [touch locationInView:[touch view]];  
  
       CGPoint  glLocation=[[CCDirector sharedDirector] convertToGL:touchLocation];  
       glLocation = [self convertToNodeSpace:glLocation];  


       这里一般用到  
       [touch locationInView:[touch view]]  这句话,这句话的意思是,获得touch在当前view的location 的相对坐标,这个时候有个问题,如果我们只想在当前layer处理这个事件,如果用户点击的view不是我们想要处理的view的时候,这个时候会有问题,导致对用户是否touch在我们想要的区域的判断会有问题。比如下面的判断是基于以上的代码的:
     
//判断是否是touch在ruler的范围内  
   if (  
       glLocation.y >= - SelBarSprite.contentSize.height * 0.5f  &&   
       glLocation.y <=   SelBarSprite.contentSize.height * 0.5f &&  
    glLocation.x >= - SelBarSprite.contentSize.width * 0.5f  &&  
       glLocation.x <=   SelBarSprite.contentSize.width * 0.5f)  
{  
    bTouchInsideBlinderRuler=true;  
    touchBeginPoint=glLocation;  
    touchOldPoint=glLocation;  
}  


    今天总算找到了好的解决方法了,就是使用egalView ,也就是获得touch相对于egalview的坐标,这样获取的坐标就是基于winSize的坐标了,判断区域也不会有问题。

    修改后的代码如下:
   
UITouch  *touch=[touches anyObject];  
       CGPoint   touchLocation = [touch locationInView:[[CCDirector sharedDirector] view]];  
     
CGPoint  glLocation=[[CCDirector sharedDirector] convertToGL:touchLocation];  
       glLocation = [self convertToNodeSpace:glLocation];  


   中间的变化在于:将
  CGPoint  touchLocation= [touch locationInView:[touch view]];
   替换成了:
  CGPoint   touchLocation = [touch locationInView:[[CCDirector sharedDirector] view]];
  这要获得的就是基于egalView的坐标了。
分享到:
评论

相关推荐

    获取点击手机屏幕的xy坐标值简单代码demo

    在Android开发中,有时我们需要获取用户在屏幕上点击的位置,以便实现特定的功能,比如自定义手势识别、游戏控制或UI交互。这个"获取点击手机屏幕的xy坐标值简单代码demo"正是针对这一需求的一个实例。接下来,我们...

    屏幕2D坐标转化为场景3D坐标

    最后,这些坐标经过视口变换(Viewport Transformation)变为屏幕2D坐标,显示在屏幕上。 "ReadDepth"是一个功能,它通过读取Z Buffer(也称为深度缓冲区)的深度值来实现2D坐标到3D坐标的转换。Z Buffer是OpenGL...

    android获得当前view在屏幕中坐标的方法

    在Android开发中,有时我们需要获取View在屏幕中的确切位置,例如在实现自定义滚动效果或者进行界面交互时。本文将详细介绍如何在Android中获取当前View的屏幕坐标,并提供实际应用场景和示例代码。 首先,Android...

    屏幕坐标向OpenGL坐标的转换

    屏幕坐标通常指的是显示器上像素的位置,而OpenGL坐标则是一种更加抽象的坐标系,用于在三维空间中表示对象。这两种坐标系统之间的转换对于实现交互式图形应用至关重要。 ### 屏幕坐标向视景体坐标转换 屏幕坐标是...

    openlayers点击获取坐标Demo

    这个Demo的目的是帮助开发者理解如何在OpenLayers 3中集成点击获取坐标的功能,这对于开发基于地理位置的应用程序至关重要。你可以根据实际需求调整代码,例如添加坐标显示、标记点等功能。通过深入学习OpenLayers的...

    Android获取用户点击的坐标

    在Android开发中,获取用户点击的坐标是一项基本但至关重要的功能,它允许开发者根据用户的触摸位置执行特定操作,如响应用户界面元素的交互、绘制图形或处理游戏中的玩家输入等。下面将深入探讨如何在Android应用...

    动态获取坐标

    在这个“动态获取坐标”的项目中,我们可以推测开发者创建了一个应用程序,能够实时跟踪并显示手指在屏幕上的位置,为用户提供一个直观的坐标参考系。 首先,我们要理解的是“动态获取坐标”是如何实现的。在...

    获取点击位置的颜色

    这个功能可以帮助开发者获取用户在屏幕上点击位置所对应的像素颜色,从而实现如颜色选择器、像素分析等应用功能。以下我们将详细探讨如何实现这一功能。 首先,我们需要了解Android中的颜色获取涉及到的主要组件和...

    PyQt5追踪鼠标当前位置 移动鼠标和点击鼠标获取坐标

    # PyQt5追踪鼠标当前位置 移动鼠标和点击鼠标获取坐标 1. 简洁明了的代码,帮助快速学习鼠标事件; 2. 重定义mouseMoveEvent事件实现移动鼠标显示坐标; 3. 重定义mousePressEvent事件实现点击鼠标显示坐标。

    屏幕坐标向OpenGL坐标的转换(完整版)

    在进行坐标转换前,我们需要获取OpenGL的当前状态参数,包括视口(Viewport)、模型视图矩阵(Modelview Matrix)和投影矩阵(Projection Matrix)。这些参数通过OpenGL的API函数`glGetIntegerv`、`glGetDoublev`...

    Android自定义View,View中的原点坐标相关问题

    布局编辑器可以在设计视图中预览View的布局,而调试工具如Hierarchy Viewer(在较新版本中被Layout Inspector取代)可以显示视图层次结构和每个View的实际大小与位置,有助于直观地理解坐标系统。 此外,了解触控...

    QGraphicsView框架容易忽视的坐标问题-“画布”QgraphicsScene到底放在了哪儿?

    在Qt库中,QGraphicsView和QGraphicsScene是用于创建高级图形用户界面的重要组件,尤其在需要进行自定义绘图和交互式图形显示时。QGraphicsView是窗口,它负责显示QGraphicsScene对象,而QGraphicsScene则可以视为一...

    Android-一个小的坐标转化工具可以将坐标点或其他的点转化到自定义的view上面

    - `View.getLocationOnScreen()`:获取View在屏幕(不包括通知栏和导航栏)中的位置,同样返回一个Rect对象。 - `View.mapFromGlobalToLocal(Point)`:将全局屏幕坐标转换为View的局部坐标。 - `View.mapToGlobal...

    C#获取鼠标坐标源码

    在C#编程中,获取鼠标坐标是一项常见的任务,特别是在开发涉及用户交互的桌面应用程序时。以下将详细讲解如何在C#中实现这一功能,并提供相关的源码示例。 首先,我们要了解C#中的Windows Forms或WPF框架,这两个都...

    python获取点击的坐标画图形的方法

    在`pentagonUpdate`函数中,首先定义了一个字典`p`用于存储鼠标点击的坐标,然后创建了一个`GraphWin`窗口。接着,循环5次获取用户的鼠标点击,每次点击都会被添加到字典`p`中,并在窗口上绘制一个标记。最后,使用...

    Android判断touch事件点是否在view范围内的方法

    最后,更新`mChangeImageBackgroundRect`的坐标,使其表示View在屏幕上的完整位置,并使用`contains()`方法判断触摸点(x, y)是否在Rect区域内。 注意,`contains()`方法返回true表示触摸点在Rect内,否则返回false...

    Android MotionEvent 坐标获取

    Android MotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别 getX() : 是获取相对当前控件(View)的坐标 getRawX() : 是获取相对显示屏幕左上角的坐标

    iphone获取view上面的鼠标的坐标

    标题"iphone获取view上面的鼠标的坐标"描述的场景可能是通过第三方硬件或模拟器实现了鼠标输入,并需要获取这些输入在应用界面中的位置。以下将详细讲解如何在iOS中处理这样的需求。 首先,要获取触控或模拟鼠标...

    OpenGL中各种坐标系的理解.docx

    此外,OpenGL中还有一个坐标变换矩阵栈(ModelView),栈顶就是当前坐标变换矩阵,进入OpenGL管道的每个坐标(齐次坐标)都会先乘以这个矩阵,最后得到屏幕上的显示结果。因此,正确地使用坐标变换矩阵栈是非常重要...

    使用osg获取模型的世界坐标下的包围盒

    在虚拟现实和增强现实应用中,精确地获取3D模型在世界坐标系中的位置和尺寸信息至关重要。"使用osg获取模型的世界坐标下的包围盒"这一技术正是为了满足这样的需求。osg,全称OpenSceneGraph,是一个强大的开源3D图形...

Global site tag (gtag.js) - Google Analytics