Cocos2d-x 图像渲染和动画——3.0坐标系详解
2016-07-13 21:17
585 查看
Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。
iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下。
Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。
本地坐标系也叫相对坐标系,是和节点相关联的坐标系。每个节点都有独立的坐标系,当节点移动或改变方向时,和该节点关联的坐标系将随之移动或改变方向。
Anchor Point的两个参数都在0~1之间。它们表示的并不是像素点,而是乘数因子。(0.5, 0.5)表示Anchor Point位于节点长度乘0.5和宽度乘0.5的地方,即节点的中心
在Cocos2d-x中Layer的Anchor Point为默认值(0, 0),其他Node的默认值为(0.5, 0.5)。
Layer比较特殊,它默认忽略锚点,所以要调用
PositionZ是Cocos2d-x坐标系中Z值
zOrder是Cocos2d-x本地坐标系中Z值
PositionZ的值即为opengl的z值VertexZ。可以通过setPositionZ接口来设置PositionZ。在实际开发中我们只需关注zOrder。
Touch position是屏幕坐标系中的点,OpenGL position是Cocos2d-x用到的OpenGL坐标系上的点坐标。通常我们在开发中会使用两个接口
此外,关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法:
注意,例如convertToNodeSpace,参数传入的是worldPoint,也就是将一个世界坐标转换为以当前节点为参考的局部坐标。其他函数类似。AR是考虑Anchor Point,无AR则不考虑Anchor Point。
笛卡尔坐标系
笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。屏幕坐标系和Cocos2d坐标系
标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下。
Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。
世界坐标系(World Coordinate) VS 本地坐标系(Node Local)
世界坐标系也叫做绝对坐标系,是游戏开发中建立的概念。因此,“世界”指游戏世界。本地坐标系也叫相对坐标系,是和节点相关联的坐标系。每个节点都有独立的坐标系,当节点移动或改变方向时,和该节点关联的坐标系将随之移动或改变方向。
锚点(Anchor Point)
将一个节点添加到父节点里面时,需要设置其在父节点上的位置,本质上是设置节点的锚点在父节点坐标系上的位置。Anchor Point的两个参数都在0~1之间。它们表示的并不是像素点,而是乘数因子。(0.5, 0.5)表示Anchor Point位于节点长度乘0.5和宽度乘0.5的地方,即节点的中心
在Cocos2d-x中Layer的Anchor Point为默认值(0, 0),其他Node的默认值为(0.5, 0.5)。
Layer比较特殊,它默认忽略锚点,所以要调用
ignoreAnchorPointForPosition(false)来改变锚点。
ignoreAnchorPointForPosition()作用是将锚点固定在一个地方。如果设置其值为true,则图片资源的Anchor Pont固定为左下角,否则即为所设置的位置。
VertexZ,PositionZ和zOrder
VerextZ是OpenGL坐标系中的Z值PositionZ是Cocos2d-x坐标系中Z值
zOrder是Cocos2d-x本地坐标系中Z值
PositionZ的值即为opengl的z值VertexZ。可以通过setPositionZ接口来设置PositionZ。在实际开发中我们只需关注zOrder。
触摸点(Touch position)
所以在处理触摸事件时需要用重写以下四个函数:virtual bool onTouchBegan(Touch *touch, Event * event); virtual void onTouchEnded(Touch *touch, Event * event); virtual void onTouchCancelled(Touch *touch, Event * event); virtual void onTouchMoved(Touch *touch, Event * event);
Touch position是屏幕坐标系中的点,OpenGL position是Cocos2d-x用到的OpenGL坐标系上的点坐标。通常我们在开发中会使用两个接口
getLocation()和
getLocationInView()来进行相应坐标转换工作,而内部实现是通过调用
Director::getInstance()->convertToGL(_point);返回GL坐标。
此外,关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法:
// 把世界坐标转换到当前节点的本地坐标系中 Point convertToNodeSpace(const Point& worldPoint) const; // 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 Point convertToWorldSpace(const Point& nodePoint) const; // 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 Point convertToNodeSpaceAR(const Point& worldPoint) const; // 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中 Point convertToWorldSpaceAR(const Point& nodePoint) const;
注意,例如convertToNodeSpace,参数传入的是worldPoint,也就是将一个世界坐标转换为以当前节点为参考的局部坐标。其他函数类似。AR是考虑Anchor Point,无AR则不考虑Anchor Point。
相关文章推荐
- Cocos2d-x 基础概念——调度器(scheduler)
- Cocos2d-x 基础概念——导演、场景、层、精灵
- Cocos2d-x 综述——API 风格
- cocos2dx spine之一 :spine缓存 (c++ & lua)
- 使用TexturePacker生成png和plist,在Cocos2dx中使用plist和png
- Cocos Creator 控制面板
- Cocos Creator 介绍
- cocos2d-x怎么实现跨平台 记录
- Cocos2d-JS schedule用法
- 【cocos2d-js官方文档】十七、事件分发机制
- Qiuck_Cocos基础(二)
- Qiuck_Cocos基础(一)
- cocos2dx 3.0 beta android环境配置 (转)
- 手游研发系列【1】—— csv解析方案
- Cocos2d-x使用iconv库解决UTF8乱码与移植安卓
- cocos2d-x lua中实现异步加载纹理
- cocos2dx-3.10-lua_函数
- cocos2dx-lua_热更新_官方示例_AssetsManagerExTest
- cocos2dx-3.10_配置问题
- 在Quick-cocos2d-x中使用LuaXML