OpenGL 坐标系 :   原点在屏幕左下角,x 轴向右,y 轴向上。

UI坐标体系       :   原点在屏幕左上角,x 轴向右,y 轴向下。

屏幕坐标系:    UI

世界坐标系:  也叫绝对坐标系 :   GL,是窗口的坐标系,原点在窗口的左下角。

本地坐标系:

节点坐标系:  是Node的坐标体系,GL。每个节点都有自己的坐标系,

      所以和世界体系不同的是,它的原点是节点的左下角。

!!!当一个节点调用setPosition时, 使用的参数是它的父节点(渲染树)的坐标体系。

!!!CCLayer,CCScene默认大小和窗口一样,所以它的坐标体系和世界坐标体系重合。

GL坐标和世界坐标之间的转化:
CCDirector::getInstance()->convertToUI(参数);
CCDirector::getInstance()->convertToGL(参数);

世界坐标 和 节点坐标 的转化(常用)
CCNode::convertToNodeSpace(CCPoint ptInWorld);
CCNode::convertToWorldSpace(CCPoint ptInNode);

按照锚点为原点进行转化的方法
CCNode::convertToNodeSpaceAR(CCPoint ptInWorld);
CCNode::convertToWorldSpaceAR(CCPoint ptInNode);

.h文件

 #ifndef __example2_H__
#define __example2_H__ #include<cocos2d.h>
USING_NS_CC; class example2 : public CCLayerColor
{
public:
static CCScene* scene();
CREATE_FUNC(example2);
bool init();
bool onTouchBegan(Touch* touch, Event* event);
Sprite* _sprite;
};
#endif

.cpp文件

 #include "example2.h"

 CCScene* example2::scene()
{
CCScene* s = CCScene::create();
example2* layer = example2::create();
s->addChild(layer);
return s; }
bool example2::init()
{
CCLayerColor::initWithColor(ccc4(,,,)); CCSize size = CCDirector::getInstance()->getWinSize();
CCLayerColor* layer = CCLayerColor::create(ccc4(,,,),size.width/,size.height/);
addChild(layer); CCSprite* sprite = CCSprite::create("CloseNormal.png");
_sprite = sprite;
layer->addChild(sprite);
sprite->setPosition(ccp(,)); layer->setPosition(ccp(,)); //CCPoint psSpriteInWorld = layer->convertToWorldSpace(sprite->getPosition());
//CCPoint psSpriteInworld1 = layer->convertToNodeSpace(sprite->getPosition()); 错误写法
//CCLog("x = %f,y = %f",psSpriteInWorld.x,psSpriteInWorld.y);
//CCLog("x = %f,y = %f", psSpriteInWorld1.x, psSpriteInWorld1.y); setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne); return true;
} bool example2::onTouchBegan(CCTouch* touch, CCEvent*)
{
CCPoint ptInUI = touch->getLocationInView();
CCPoint ptInGL = touch->getLocation(); CCPoint ptUIConvert = CCDirector::getInstance()->convertToGL(ptInUI);
CCLog("x = %f, y = %f",ptInGL.x,ptInGL.y);
CCLog("x = %f, y = %f",ptUIConvert.x,ptUIConvert.y);
//判断是否点中了精灵
//获取精灵的矩形,获取触摸点,判断触摸点是否在矩形内。 CCRect rc = _sprite->boundingBox();//获取精灵的矩形,属于UI坐标系
CCPoint touchPoint = touch->getLocation();//GL
//转化为同一个体系才好判断
//if (rc.containsPoint(_sprite->getParent()->convertToNodeSpace(touchPoint))) 下面的更简单
if (rc.containsPoint(_sprite->getParent()->convertTouchToNodeSpace(touch)))
{//直接把touch传进去,而不用使用touch->getLocation()方法了 CCLog("ok I am in log");
}
return true;
}

一个疑问: bool ccTouchBegan(Touch* touch, Event* event);提示 无法重写CCLayer的该方法,应该已经设置为fianl 。

3.0之前不是final的吗?

Cocosd-x的坐标系的更多相关文章

  1. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  2. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  3. 北京54全国80及WGS84坐标系的相互转换

    这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准.其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3:西安80坐标系, ...

  4. OpenGL中坐标系的理解(一)

    在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...

  5. 各类坐标系相互之间的转换(84互转GC02,GC02互转BD09)

    在遥感行业我们经常会用到各类的坐标系相互之间的转换,常见的度分秒转化为度很简单,直接上代码: //经纬度 ////118度48分54.152秒=118+(48/60)+(54.152/3600)=11 ...

  6. qgis自定义坐标系与qgis.db问题

    将编译好的qgis库整理,屏蔽获取删除环境变量中的路径,测试qgis.exe程序功能 如出现如上提示: 原因:是未找到qgis.db文件,无法拷贝到系统默认的C:/Users/Administrato ...

  7. 多种坐标系之间的转换 Proj.NET和DotSpatial

    Proj.NET ( http://projnet.codeplex.com/)是一个.NET下开源的空间参照和投影引擎,遵循OGC相关标准.负责人(Coordinators )是D_Guidi 和S ...

  8. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块

    config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...

  9. GPS各种地图坐标系转换(转载)

    http://my.oschina.net/fankun2013/blog/338100 地图供应商比较多,产生了许多地图坐标.地图坐标正确转换是个问题.在之前开发地图应用的时候发现从WGS84坐标系 ...

  10. [转]iOS开发中的火星坐标系及各种坐标系转换算法

     iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183   其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...

随机推荐

  1. 浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的解决方案

    浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的解决方案 本文是截止目前为止最强攻略,按照本文方法基本可以无压力应对caffe和Ross B. Girshick的 ...

  2. [转]搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速

    搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速 有的同学反映自己的搬瓦工速度慢,丢包率高.这其实和你的网络服务提供商有关.据我所知一部分上海电信的同学就有这种问题.那么碰到了坑爹的网络服务 ...

  3. 搭建git for windows服务器(100%可以成功)

    既然Git在Linux下面非常好用,为什么还要搭建git windows的服务器,因为不是所有的用户都需要在linux下面做开发,对吧,还有很多用户选择使用windows做开发. 看到很多网友尝试部分 ...

  4. SecureCRT连接VirtualBox下的ubuntu以及NMP的搭建与通过宿主机访问该NGINX服务器过程

    一直使用wamp作为开发环境,只是工作中时常会遇到在wamp下没问题但是提交到服务器生产环境会出现一些意想不到的情况,由此萌生了在本机搭建LNMP环境的想法,我个人不知道其他人的虚拟机搭建服务器环境是 ...

  5. 使用T4模板生成代码的学习

    之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...

  6. ios-将代码创建的视图控件放入拖拽控件的下面

    如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...

  7. 【详解】ERP、APS与MES系统是什么?

    ERP是什么?MES是什么?APS又是什么?无论他们有什么功能,对企业有什么意义,不过都是计算机在读写一些数据而已.实际上这一切的本质不过是数据在硬盘和内存中快速的读和写. ERP是--,APS是-- ...

  8. Jquery操作select,左右移动,双击移动 取到所有option的值

    $(function () { function MoveItem(fromId, toId) { $("#" + fromId + " option:selected& ...

  9. csuoj 1117: 网格中的三角形

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1117 1117: 网格中的三角形 Time Limit: 3 Sec  Memory Limit: ...

  10. Python爬虫爬取百度贴吧的图片

    根据输入的贴吧地址,爬取想要该贴吧的图片,保存到本地文件夹,仅供参考: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2i ...