【Cocos2d-x】02 基础概念学习

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 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值