cocos2d-x: 坐标系
2012-10-09 18:12
211 查看
(1)屏幕坐标系
在windows系统中,默认的原点在屏幕的左上角,X轴向右,Y轴向下。
CCTouch对象中的坐标
(2)GL坐标系
原点在左下角,X轴向右,Y轴向上。由于cocos2d-x使用的是open gl渲染引擎,而不是directx 3d引擎,那么GL坐标系就不和屏幕坐标系重合,这是要注意的一点。因此,当我们调用了一个屏幕响应事件时,如ccTouchEnded(CCTouch* touch, CCEvent* event);
此时我们CCPoint location = touch->locationInView(touch->View)返回点击处在屏幕坐标系的位置,而不是GL坐标系。因此就有将屏幕坐标系转换成GL坐标系的函数。
CCPoing convertedLocation = CCDirector::sharedDirector()->convertToGL(location);
(3)本地坐标系
游戏中,每一个对象都有一个自己的坐标系,这些坐标系就叫做本地坐标系。
相对于父对象的坐标系,原点在左下角,X轴向右,Y轴向上。举个例子,以我自己作为坐标原点,那么在我附近(在我这个坐标系内)的对象就是子对象,而我就是父对象,这些子对象的位置都是本地坐标系,是相对于我(父对象)来说的。下面我举一个代码来做说明:
..........
CCLayer* layer = new CCLayer();
CCSprite* player = CCSprite::spriteWithFile("player.png");
layer->addChild(player, 1);
................
在这里,player对象就是子对象,layer就是父对象,那么player相对于layer的位置就是在本地坐标系中的位置。如果,layer(父对象)发生移动,就是我们说的背景移动,那么,player(子对象)也会跟着移动,但子对象在本地坐标系中的位置不变,改变的是子对象在世界坐标系中的位置。
比如物体的各个坐标都是相对Scence来的。
(4)世界坐标系
世界坐标系和GL坐标系一致,原点在屏幕左下角,x轴向右,y轴向上。世界坐标就是所谓的绝对坐标,所有的对象虽然都有自己的本地坐标系,但这些对象同样的在世界坐标系中也有一个坐标。
另外:CCNode类的setPosition、getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标。
另一个关键的问题就是在cocos2d-x里面就是各种对象的大小问题。因为在cocos2d-x里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候就必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d-x里提供了对应的函数来完成这些操作。
getContentSize 函数用来获得节点原始的大小。
boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
在windows系统中,默认的原点在屏幕的左上角,X轴向右,Y轴向下。
CCTouch对象中的坐标
(2)GL坐标系
原点在左下角,X轴向右,Y轴向上。由于cocos2d-x使用的是open gl渲染引擎,而不是directx 3d引擎,那么GL坐标系就不和屏幕坐标系重合,这是要注意的一点。因此,当我们调用了一个屏幕响应事件时,如ccTouchEnded(CCTouch* touch, CCEvent* event);
此时我们CCPoint location = touch->locationInView(touch->View)返回点击处在屏幕坐标系的位置,而不是GL坐标系。因此就有将屏幕坐标系转换成GL坐标系的函数。
CCPoing convertedLocation = CCDirector::sharedDirector()->convertToGL(location);
(3)本地坐标系
游戏中,每一个对象都有一个自己的坐标系,这些坐标系就叫做本地坐标系。
相对于父对象的坐标系,原点在左下角,X轴向右,Y轴向上。举个例子,以我自己作为坐标原点,那么在我附近(在我这个坐标系内)的对象就是子对象,而我就是父对象,这些子对象的位置都是本地坐标系,是相对于我(父对象)来说的。下面我举一个代码来做说明:
..........
CCLayer* layer = new CCLayer();
CCSprite* player = CCSprite::spriteWithFile("player.png");
layer->addChild(player, 1);
................
在这里,player对象就是子对象,layer就是父对象,那么player相对于layer的位置就是在本地坐标系中的位置。如果,layer(父对象)发生移动,就是我们说的背景移动,那么,player(子对象)也会跟着移动,但子对象在本地坐标系中的位置不变,改变的是子对象在世界坐标系中的位置。
比如物体的各个坐标都是相对Scence来的。
(4)世界坐标系
世界坐标系和GL坐标系一致,原点在屏幕左下角,x轴向右,y轴向上。世界坐标就是所谓的绝对坐标,所有的对象虽然都有自己的本地坐标系,但这些对象同样的在世界坐标系中也有一个坐标。
另外:CCNode类的setPosition、getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标。
另一个关键的问题就是在cocos2d-x里面就是各种对象的大小问题。因为在cocos2d-x里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候就必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d-x里提供了对应的函数来完成这些操作。
getContentSize 函数用来获得节点原始的大小。
boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
相关文章推荐
- cocos2d-x坐标系
- cocos2d-x 坐标系解惑
- cocos2d-x坐标系详解 (对于新手有点用)
- Cocos2d坐标系
- cocos2d-x坐标系、锚点、矩阵变换详解
- Fall in love with cocos2d-x之坐标系
- cocos2d坐标系
- 十一:Cocos2d-x坐标系
- cocos2d中的屏幕坐标系和OPenGL坐标系转换
- 【cocos2D-x学习】5.坐标系其三——再看Cocos中的坐标系
- UIView坐标系、Cocos2d坐标系与OpenGL坐标系
- cocos2d-x坐标系
- [cocos2d-x]关于坐标系
- cocos2d 坐标系使用
- cocos2d-x学习笔记——坐标系,锚点,文本类
- cocos2d-x之详解坐标系
- COCOS2D-X坐标系
- Cocos2d-X中的坐标系
- Cocos2d-x学习笔记(三)—— 坐标系
- Cocos2d-x扫盲之坐标系、锚点