本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=11
注:ccp是cocos2dx中的一个宏定义,表示坐标信息
一、笛卡尔坐标系
你可能在学校的几何学上已经知道笛卡尔坐标系。如果你忘记了,下面的图片可以让你回忆一下:
有3中类型的坐标系在游戏开发中你会用的到。
1)UI坐标系:
一般用于iso、android、windows sdk中:
原点(x=0,y=0)在左上角。
x方向从左侧向右侧递增。
y方向从屏幕顶部向底部递增。
2)Direct3D坐标系
DirectX用左手笛卡尔坐标系
3)OpenGL和Cocos2D坐标系
Cocos2dx和OpenGL一样用右手坐标系,在二维世界里,我们仅仅使用x轴和y轴,那么在cocos2d游戏中:
原点在屏幕的左下角,意味着屏幕在右手坐标系的第一象限中。
X轴从屏幕左侧向右侧延伸
Y轴从屏幕底部向顶部延伸
底下有张图片可以帮你理解cocos2dx坐标系:
二、父类和子类:
每一个继承自CCNode的类都有一个锚点属性。当决定如何绘制对象(Sprite,Layer,一起其他的)的时候,cocos2d-x将会考虑位置信息以及锚点信息。并且,当旋转一个物体的时候,cocos2d-x也会绕着锚点旋转。
我们创建一个灰色的Sprite的图像作为父对象,创建一个绿色的Sprite作为子对象。设置父对象的位置为ccp(100,100),锚点ccp(0,0),子对象的位置在ccp(0,0),锚点ccp(0.5,0.5)。
CCSprite* parent = CCSprite::create("parent.png");
parent->setAnchorPoint(ccp(0, 0));// 锚点
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);//添加子精灵到父精灵中
我们设置了子对象的位置在ccp(0,0),父对象的位置在ccp(100,100),因此,子对象显示在如图所示位置:
三、锚点
锚点被用于位置和旋转物体。锚点是相对坐标(也就是一个百分比),经常被用来对应一个物体内的点。例如,锚点是ccp(0.5,0.5)(表示x方向在物体50%的位置,y方向50%的位置)对应物体的中心。当设置物体位置的时候,调用setPositon时,锚点信息也会在坐标系中展示。相同的,当转动物体,物体将会随锚点转动。
例如,如下精灵有一个锚点cpp(0,0)并且位置在ccp(0,0):
因此,精灵被放置在屏幕左下角。
// 创建精灵
CCSprite* sprite = CCSprite::create("bottomleft.png");
sprite->setAnchorPoint(ccp(0, 0));// 锚点
sprite->setPosition(ccp(0,0));
addChild(sprite);
在如下的例子中,展示了锚点坐标的相对性,锚点被赋值为ccp(0.5,0.5),位于精灵的中心。
// 创建精灵
CCSprite* sprite = CCSprite::create("center.png");
sprite->setAnchorPoint(ccp(0.5, 0.5));// Anchor Point
sprite->setPosition(ccp(0,0));
addChild(sprite);
正如你所看到的的,精灵的中心位置被放置在了坐标原点(0,0)。这也就是说锚点不是一个像素值。锚点的X和Y值是相对于该节点的大小。
你也可以设置锚点为ccp(0.3,0.3),物体左下角锚点是(0,0),右上角是(1,1),因此ccp(0.3,0.3)表示在X方向上30%位置,Y方向上30%位置。
分享到:
相关推荐
Cocos2dx-3.9 中文API CHM 文档 用过的都懂
cocos2dx-3.x游戏开发之旅电子版供大家下载参考。。。。。。
kbengine-cocos2dx-cocos2dx-consoft.zip.针对kbengine引擎的cocos端 官方demo
cocos2dx-3.10-api.lua cocos官方API大全,使用VS按F12直接跳转
cocos2dx 前端 游戏 高级开发 cocos2dx 前端 游戏 高级开发
可以快速解出cocos-lua, quick-cocos引擎使用xxtea加密的lua与zip文件。对luajit编译过的bytecode毫无办法。 资源来自吾爱破解论坛,作者ID:skyxiaoyu。感谢作者的分享
用vsdoe开发cocos2dx-lua的辅助文件,用于代码提示,提高代码效率。一并提交了制作脚本。 cocos2dx-lua,vscode代码提示文件,附带制作脚本
Quick-Cocos2dx-Community 3.6.5 由社区维护的版本,基于 quick 3.3
cocos2dx-html5,api离线文档,在线文档参考 http://amswf.com/cocos2d-html5/2.2/index.html
cocos2dx-2.2.3.part05.rar
cocos2dx 游戏开发系列之三 的 android工程源码
cocos2dx的简单介绍,包括cocos2dx的前世今生,基本用法,ppt分享
Quick-Cocos2dx-Community 3.6.5 Release Note带官方热更新等demo
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
cocos2dx 2.x 开发示例游戏合集 效果展示: https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0215.jpg https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0216.jpg ...
cocos2dx-js 3.17.2版本 升级spine库到3.8版本, 内容改动较多,这是我升级过后的代码,自测可以用,对应的文章中可能讲解不全面,以代码为准。将下载文件替换原来的文件
使用cocos2dx-2.2.1写的一款简单的射击类游戏。 比上次《cocos2dx-2.2.1射击类游戏》新增了开场动画和菜单功能,还有得分记录功能。界面有点简陋。随便找了一些图片放上去的。
Cocos2dx引擎CocosDenshion库-Win32平台下实现setBackgroundMusicVolume函数
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
cocos2dx scrollview优化