不同坐标系简介
笛卡尔坐标系
你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆:
在移动游戏开发过程中,有三种类型的坐标系你可能遇到:
UI坐标系
iOS/Android/Windows SDK中的通用UI坐标系:
- 起点坐标(x=0, y=0)位于左上角
- X轴从屏幕最左边开始,由左向右渐增
- Y轴坐标从屏幕最上方开始,由上向下渐增
详见下图
Direct3D坐标系
DirectX 使用Left-handed Cartesian Coordinate
OpenGL和Cocos2d坐标系
Cocos2d-x/-html5/-iphone使用的坐标系和OpenGL的坐标系一样,名为“Right-handed Cartesian Coordinate Syste”。
在2D世界中,我们仅会使用x轴和y轴。所以在你的cocos2d游戏中:
- 起点坐标(x=0, y=0)位于左下角,这意味着屏幕位于
- X轴从屏幕最左边开始,由左向右渐增
- Y轴坐标从屏幕最下方开始,由下向上渐增
下面这张图片有助于更好的阐述Cocos2d-x坐标:
一定要注意:通用UI坐标系和DirectX坐标系是不一样的。
Parent and Childrens
由于每个类都继承自CCNode(cocos2d-x的最顶层类),所以每个类都会默认有anchorPoint属性。 当我们在一个位置画一个的对象的时候,cocos2d-x会合并属性位置和anchorPoint。当然,当旋转一个对象时,cocos2d-x会围绕绕anchorPoint旋转的。
我们创建一个灰色父对象和一个蓝色子对象。设置父对象位置是ccp(100,100),子对象的anchor point位于圆心。
CCSprite* parent = CCSprite::create("parent.png");
parent->setAnchorPoint(ccp(0, 0));// Anchor Point
parent->setPosition(ccp(100, 100));
parent->setAnchorPoint(ccp(0, 0));
addChild(parent);
//create child
CCSprite* child = CCSprite::create("child.png");
child->setAnchorPoint(ccp(0.5, 0.5));
child->setPosition(ccp(0, 0));
parent->addChild(child);//add child sprite into parent sprite.
CCSprite* parent = CCSprite::create("parent.png");
parent->setAnchorPoint(ccp(0, 0));// Anchor Point
parent->setPosition(ccp(100, 100));
parent->setAnchorPoint(ccp(0, 0));
addChild(parent);
//create child
CCSprite* child =<