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 其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...
随机推荐
- responsive tables
以上内容原本是整理为ppt格式的,贴过来格式有点乱,请见谅. 其他responsive tables参考: http://gergeo.se/RWD-Table-Patterns/ 3种类型的代码参考 ...
- Yii2 关闭和打开csrf 验证 防止表单多次重复提交
原文地址:http://blog.csdn.net/terry_water/article/details/52221007 1.在Yii2配置中配置所有:所有的controller都将关闭csrf验 ...
- ios上position:fixed失效问题
手机端上的猫腻真是多啊~~~ 此起彼伏! 最近又遇到了 固定定位的底部导航在ios上被弹出去 此时内心1w+个草泥马奔过~~~~~~~~ 直接上解决方案: <div class="ma ...
- js 防止button频繁点击
<input type="button" class="test" title="Select" value="Select ...
- DOM中文本节点索引方法
问题 对于 jquery 接口text()只能取到有标签的 dom对象中 文本内容. 如果索引对象本身就是文本节点,则不好索引到, 没有相关的索引选择器. 例如: 对于<input>aaa ...
- Android四大核心组件之BroadCastReceiver
实验内容 实现BroadCast发送和接受 通过BroadCast传递信息 动态注册和注销BroadCast 实验要求 实现BroadCast发送和接受 通过BroadCast传递信息 动态注册和注销 ...
- Discovering-论文
Discovering Spatio-Temporal Causal Interactions in Traffic Data Streams data:real taxi trajectories ...
- Pointcut is malformed: Pointcut is not well-formed: expecting 'identifier' at character position 0 ^
错误提示: 解决方法:指定execution 在执行目标方法之前指定execution 例如: import org.aspectj.lang.annotation.Aspect; import or ...
- Android系统拍照源码
个人对于Android系统拍照的一些总结:一种自定义图片拍照路径 ,另一种直接利用Android拍照后经过处理的缩略图 特别注意第一种方式需要增加SDK读写权限: <uses-permissio ...
- js基础练习二之简易日历
今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...