Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

  次阅读 来源:互联网(转载协议) 2015-09-28 10:47 我要评论(0)

cocos2d-x的坐标系很重要,想要学好该引擎,深入理解它的坐标体系很重要。注释写的很清楚了,对照上运行结果一块来看代码吧!

bool HelloWorld::init()

{

bool bRet = false;

do

{

CC_BREAK_IF(! CCLayer::init());

//opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向

//这里的世界指的是游戏世界

//屏幕坐标系是以左上角为原点,是我们熟悉的

//本地坐标系也叫节点坐标系,世界坐标系是相对于整体而言的,而本地坐标系是相对于父节点而言的,理解这点很重要

//CCDirector::sharedDirector()->convertToGL() 转换到OPENGL坐标系

//CCDirector::sharedDirector()->convertToUI() 转换到屏幕坐标系

//CCNode::convertToWorldSpace() 把本地坐标系转换到世界坐标系

//CCNode::convertToNodeSpace() 把世界坐标系转换到本地坐标系

//sprite1、sprite2的图片大小是100,100

CCSprite * sprite1 = CCSprite::create("image1.png");

sprite1->setPosition(ccp(100,100));

//将sprite2添加到sprite1节点中,这时候是以sprite1的左下角为原点,虽然sprite1的锚点是在它图片的中间

CCSprite * sprite2 = CCSprite::create("image2.png");

//setPosition中设置的坐标是sprite2的本地坐标

sprite2->setPosition(ccp(100,100));

sprite1->addChild(sprite2);

//getPosition中获得的坐标也是sprite2的本地坐标

CCPoint point = sprite2->getPosition();

CCLog("point.x=%f,point.y=%f",point.x,point.y);

//获得sprite2的opengl坐标系,屏幕坐标系,世界坐标系,本地坐标系

//convertToWorldSpace的传入参数是sprite2的节点坐标系(本地坐标),也就是setPosition中传入的参数,而convertToNodeSpace的传入参数是sprite2的世界坐标系,看清谁是调用者,传入的参数又是什么

CCPoint worldSpace = sprite1->convertToWorldSpace(point);

CCPoint nodeSpace = sprite1->convertToNodeSpace(worldSpace);

//以下俩个函数完成同样的功能,只不过这次的sprite2的坐标是基于sprite1的锚点的,而不是左下角了,所以我们传入了ccp(50,50)

CCPoint worldSpaceAR = sprite1->convertToWorldSpaceAR(ccp(50,50));

CCPoint nodeSpaceAR = sprite1->convertToNodeSpaceAR(worldSpaceAR);

//convertToUI中传入的是opengl坐标系,因为opengl坐标和世界坐标系是相同的,所以我们传入世界坐标

CCPoint ui = CCDirector::sharedDirector()->convertToUI(worldSpace);

CCPoint opengl = CCDirector::sharedDirector()->convertToGL(ui);

CCLog("opengl.x=%f,opengl.y=%f",opengl.x,opengl.y);

CCLog("ui.x=%f,ui.y=%f",ui.x,ui.y);

CCLog("worldspace.x=%f,worldspace.y=%f",worldSpace.x,worldSpace.y);

CCLog("nodeSpace.x=%f,nodeSpace.y=%f",nodeSpace.x,nodeSpace.y);

CCLog("worldspaceAR.x=%f,worldspaceAR.y=%f",worldSpaceAR.x,worldSpaceAR.y);

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...