Cocosd-x的坐标系

时间:2022-09-26 11:40:13

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&period;db问题

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

  7. 多种坐标系之间的转换 Proj&period;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各种地图坐标系转换&lpar;转载&rpar;

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

  10. &lbrack;转&rsqb;iOS开发中的火星坐标系及各种坐标系转换算法

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

随机推荐

  1. php-eclipse乱码处理

    方法一:1)设置"eclipse目录下eclipse.ini文件"2)在文件结尾添加"-Dfile.encoding=UTF-8".3)重新启动eclipse, ...

  2. 内省&lpar;Introspector&rpar;

    内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...

  3. 通过 itms&colon;services&colon;&sol;&sol;&quest; 在线安装ipa ,跨过app-store

    1.需要一个html文件,引导下载用户在线安装ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&quo ...

  4. js 学习之路7:switch&sol;case语句的使用

    语法格式: switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case 1 和 case 2 不同时执行的代 ...

  5. bhttpd

    以前产品应用是用串口做控制台,写了一个带简单命令历史和命令补全功能的控制台Shell,用作程序的调试,包括查看系统状态和调试修改设定等等.确实非常好用,对很多现场简单问题的快速定位起到了很好的作用.系 ...

  6. 学号 20175223 《Java程序设计》第1周学习总结

    学号 20175223 <Java程序设计>第1周学习总结 教材学习内容总结 第一章要点: 要点1:Java的三大平台:Java SE,Java EE,Java ME. 要点2:Java的 ...

  7. Mybatis中int insertSelective&lpar;&rpar;的相关问题

    1.selective的意思是:选择性2.insertSelective--选择性保存数据:比如User里面有三个字段:id,name,age,password但是我只设置了一个字段:User u=n ...

  8. jQueryMobile的按钮样式

    好吧,已经学了jQueryMobile一年了,今天心血来潮,想要写一篇关于jQueryMobile的博客文章,记得去年暑假在公司实习jQueryMobile,想一想真是怀念当时还是菜鸟的自己,年轻就是 ...

  9. Abp中SwaggerUI的接口说明文档配置

    项目中集成了swashbuckle,那么通过访问http://ip:port/swagger/ui/index,可以看到提供的接口列表.接口列表默认是没有提供接口说明信息的,但是swagger内部是集 ...

  10. CentOS查看何人何时登陆用户

    使用linux 的last命令: last命令列出的是/var/log 目录下的wtmp文件内容,这个文件存的是二进制内容,不可以直接用vi等文本边界软件打开.这样即使是root用户也不可能随随便便的 ...