Cocosd-x的坐标系
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的坐标系的更多相关文章
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- Canvas坐标系转换
默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...
- 北京54全国80及WGS84坐标系的相互转换
这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准.其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3:西安80坐标系, ...
- OpenGL中坐标系的理解(一)
在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...
- 各类坐标系相互之间的转换(84互转GC02,GC02互转BD09)
在遥感行业我们经常会用到各类的坐标系相互之间的转换,常见的度分秒转化为度很简单,直接上代码: //经纬度 ////118度48分54.152秒=118+(48/60)+(54.152/3600)=11 ...
- qgis自定义坐标系与qgis.db问题
将编译好的qgis库整理,屏蔽获取删除环境变量中的路径,测试qgis.exe程序功能 如出现如上提示: 原因:是未找到qgis.db文件,无法拷贝到系统默认的C:/Users/Administrato ...
- 多种坐标系之间的转换 Proj.NET和DotSpatial
Proj.NET ( http://projnet.codeplex.com/)是一个.NET下开源的空间参照和投影引擎,遵循OGC相关标准.负责人(Coordinators )是D_Guidi 和S ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块
config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...
- GPS各种地图坐标系转换(转载)
http://my.oschina.net/fankun2013/blog/338100 地图供应商比较多,产生了许多地图坐标.地图坐标正确转换是个问题.在之前开发地图应用的时候发现从WGS84坐标系 ...
- [转]iOS开发中的火星坐标系及各种坐标系转换算法
iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183 其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...
随机推荐
- java中分页效果的实现代码
首先是将分页所需的一些个资源 ,抽象出一个javabean对象-PageBean: 先把需要分页的数据或是记录都查询出来 存入一个集合类里如List或是Vector, 然后利用其sublist(int ...
- 项目组织与管理SPM(理论基础)
- java 关键字查询时的转义操作
/** * mysql模糊查询时,如果查询关键字本身包含_和%,需要转义 * * @param queryKey 查询关键字 * @return 转义字符 */ private String conv ...
- ng-selected ng-change
<!DOCTYPE HTML><html ng-app="myApp"><head><meta http-equiv="Cont ...
- Swift:属性观察器
1.简单介绍 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外. 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重 ...
- C++学习笔记 知识集锦(二)
1. 命名规范 2. 代码格式 3. QString的判断 4. 对象的判空 5. 隐式接口&显式接口 6. vector&string 7. static 8. const 9. v ...
- Linux上设置memcached自启动
#!/bin/sh # # memcached: MemCached Daemon # # chkconfig: - 90 25 # description: MemCached Daemon # # ...
- MultiWiiWinGUI 汉化版
已经基本汉化完毕 下载
- setCapture只能作用于鼠标不可作用于键盘等其它事件
处理的优点非常类似于流媒体的优点.分析能够立即开始,而不是等待所有的数据被处理.而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中.这对于大型文档来说是个巨大的优点.事实上,应用 ...
- Java未被捕获的异常该怎么处理
在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式.class Exc0 { public static void ...