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. JavaScript中一些常用的方法整理

    当前时间和输入时间比较 var timeLong = Date.parse(new Date());//当前时间var t1 = Date.parse($("#returnTime2&quo ...

  2. php识别中文编码并自动转换为UTF-8

    原文地址:http://www.codefans.net/articles/1272.shtml php自动识别编码,若里面有中文的话,将其转换为UTF-8就最好了,因为中文在Gbk编辑情况情况下,有 ...

  3. QMap

    #include <QCoreApplication> #include<QMap> #include<QDebug> int main(int argc, cha ...

  4. .net资源链接

    http://aspalliance.com/ http://www.hotscripts.com/ http://www.dotnet247.com http://stackoverflow.com ...

  5. dynamodb golang query one Item

    golang  dynamodb  query  oneItem  and unmarshal  to object // +build example package main import ( / ...

  6. 网站性能,javascript性能相关知识点

    一.高性能网站 <高性能网站建设指南>一书中提出用户只有10%-20%最终用户响应时间是花在从web服务器获取html文档并传送到浏览器中,80%的时间都花在了等待页面组件中,由此提出了构 ...

  7. SQLServer中系统存储过程sp_spaceused

    sp_spaceused 执行sp_spaceused存储过程的时候可以不用带参数,直接执行,或者exec sp_spaceused都可以,返回两个结果集: 列名 数据类型 描述 database_n ...

  8. Android 屏幕适配

    前言 手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下 单位理解 首先让我们先来看看关于手机所用到的单位 真实物理尺寸单位: mm:表示毫米,是屏幕的物理尺寸. in:表示英寸,是屏 ...

  9. mysql时间属性之时间戳和datetime之间的转换

    一.datetime转换为时间戳     方案一:强制转换字段类型 use`nec`; ; ) NOT NULL COMMENT '注册时间' , ) NULL DEFAULT NULL COMMEN ...

  10. Windows Phone 六、JSON序列化

    JSON序列化 public class Person { public int Id { get; set; } public string Name { get; set; } public in ...