Cocos2d-x 002 基础
主题
- 坐标
- 锚点
- 世界坐标 本地坐标转换
上篇复习了Cocos2d-x 的导演(Director),场景(Scene),精灵(Sprite),层(Layer),这篇文章就复习一下其他的一些东西吧。
因为C++ 也学习了无数遍忘记了无数遍,没有多少印象相当于重新学习一门语言。
学习一门语言,目前我的感觉就是,先了解一下,基本的语法,关键字,基础的学习完了,然后再学习一些API,当然这个要记忆一点东西,不一定要了解太多。
学习Cocos2d-x的时候,就先了解一下基础的概念,就是抽象的用法,不是具体的。再重新回来学习。
比如:脑中可以浮现,游戏就是一个导演(Director) 控制场景的变换(场景-Scene) 每一幕都由导演控制,然后Scene里面 有一些元素,比如有一个大大的房间,房间里面有一男一女对话,房间里面有一站灯,有一个桌子,然后再由一些外部的控制,比如 我们可以控制主角的活动,灯的亮等等。
关于坐标的概念:
Cocos2d-x 坐标和OpenGL的坐标相同的,都是源自于笛卡尔坐标系。
笛卡尔坐标系:
就是右手
分为3个轴
X Y Z轴, Y轴向上,X轴向右,Z轴就是向外。
标准的屏幕坐标系又不同于Cocos2d坐标系。y轴是跟笛卡尔坐标系中的相反
———————————————
|———->X轴|
||(0.0)|
|| Y轴|
|V |
||
||
———————————————-
通常我们,经常会提到 两个概念 世界坐标系 本地坐标系 的世界当然是指游戏的世界,也就是屏幕的世界,一个屏幕 有 100,100的像素, 我们要再中间位置放一个东西就是50.50的地方设置一下就行了。这就是世界坐标系。
本地坐标系,也就是相对坐标系,相当于布局里面的相对位置,都有一个相关联的,比如我有两个视图(View) 一个VIew 和另外一个View绑定, 一个View 移动了。X轴 10 像素,Y轴10像素,另外一个VIew也根据第一个VIew 移动了10 ,10元素。
下面是锚点(Anchor Ponit)
关于描点,关于节点(Node)自身的锚点,Cocos2d-x默认就是0.5 0.5锚点,比如一张图片,元素为100,100,有上下左右, 0.5 0.5 对应的就是 图片的50.50 对应坐标系的0.0.
还有一个Layer 是一个特殊的东西,默认 设置是忽略锚点的,对应的就是0.0 这个锚点。可以设置的,现在了解那个干嘛。我们先从概念了解一下。
接下来就是那个Z轴的事了。
根据官方文档上面写着
VertexZ,PositionZ和zOrder
•VerextZ是OpenGL坐标系中的Z值
•PositionZ是Cocos2d-x坐标系中Z值
•zOrder是Cocos2d-x本地坐标系中Z值
其实我们只值需要关注Zorder就行了。
可以通过setPositionZ接口来设置PositionZ。
以下是setPositionZ接口的说明:
1
Sets the 'z'coordinate in the position. It is the OpenGL Z vertex value.
即PositionZ的值即为opengl的z值VertexZ。同样节点的PositionZ也是决定了该节点的渲染顺序,值越大,但是与zOrder不同的区别在于,PositionZ是全局渲染顺序即在根节点上的渲染顺序,而zOrder则是局部渲染顺序,即该节点在其父节点上的渲染顺序,与Node的层级有关。用以下事例来说明:
触摸点(Touch position)
处理触摸事件需要重写4个函数
virtualboolonTouchBegan(Touch *touch, Event * event);
virtualvoidonTouchEnded(Touch *touch, Event * event);
virtualvoidonTouchCancelled(Touch *touch, Event * event);
virtualvoidonTouchMoved(Touch *touch, Event * event);
关于获取的屏幕点,是标准的屏幕坐标,也就是 y轴是向下的
通常我们需要用两个接口 getLocation() getLOcationInView()来进行相应的转换工作。
关于世界坐标和本地坐标系的相互转换;
Node中定义了4个常用的转换方法:
// 把世界坐标转换到当前节点的本地坐标系中
Point convertToNodeSpace(constPoint& worldPoint) const;
// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToWorldSpace(constPoint& nodePoint) const;
// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToNodeSpaceAR(constPoint& worldPoint) const;
// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中
Point convertToWorldSpaceAR(constPoint& nodePoint) const;d