世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系

来源:互联网 发布:mac下制作win10启动盘 编辑:程序博客网 时间:2024/05/21 07:47
1.bool HelloWorld::init()  2.{  3.    bool bRet = false;  4.    do   5.    {  6.  7.        CC_BREAK_IF(! CCLayer::init());  8.        //opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向  9.        //这里的世界指的是游戏世界  10.        //屏幕坐标系是以左上角为原点,是我们熟悉的  11.  12.        //CCDirector::sharedDirector()->convertToGL 转换到OPENGL坐标系  13.        //CCDirector::sharedDirector()->convertToUI 转换到屏幕坐标系  14.        //CCNode::convertToWorldSpace() 把本地坐标系转换到世界坐标系  15.        //CCNode::convertToNodeSpace()  把世界坐标系转换到本地坐标系  16.  17.        //sprite1、sprite2的图片大小事100,100  18.        CCSprite * sprite1 = CCSprite::create("image1.png");  19.        sprite1->setPosition(ccp(100,100));  20.  21.        //将sprite2添加到sprite1节点中,这时候是以sprite1的左下角为原点,虽然sprite1的锚点是在它图片的中间  22.        CCSprite * sprite2 = CCSprite::create("image2.png");  23.        //setPosition中设置的坐标是sprite2的本地坐标  24.        sprite2->setPosition(ccp(100,100));  25.        sprite1->addChild(sprite2);  26.  27.        //getPosition中获得的坐标也是sprite2的本地坐标  28.        CCPoint point = sprite2->getPosition();  29.        CCLog("point.x=%f,point.y=%f",point.x,point.y);  30.  31.        //获得sprite2的opengl坐标系,屏幕坐标系,世界坐标系,本地坐标系  32.          33.        //convertToWorldSpace的传入参数是sprite2的节点坐标系(本地坐标),也就是setPosition中传入的参数,而convertToNodeSpace的传入参数是sprite2的世界坐标系  34.        CCPoint worldSpace = sprite1->convertToWorldSpace(point);  35.        CCPoint nodeSpace = sprite1->convertToNodeSpace(worldSpace);  36.  37.        //一下俩个函数完成同样的功能,只不过这次的sprite2的坐标是基于sprite1的锚点的,而不是左下角了,所以我们传入了ccp(50,50)  38.        CCPoint worldSpaceAR = sprite1->convertToWorldSpaceAR(ccp(50,50));  39.        CCPoint nodeSpaceAR = sprite1->convertToNodeSpaceAR(worldSpaceAR);  40.  41.        //convertToUI中传入的是opengl坐标系,因为opengl坐标和世界坐标系是相同的,所以我们传入世界坐标  42.        CCPoint ui = CCDirector::sharedDirector()->convertToUI(worldSpace);  43.        CCPoint opengl = CCDirector::sharedDirector()->convertToGL(ui);  44.  45.        CCLog("opengl.x=%f,opengl.y=%f",opengl.x,opengl.y);  46.        CCLog("ui.x=%f,ui.y=%f",ui.x,ui.y);  47.        CCLog("worldspace.x=%f,worldspace.y=%f",worldSpace.x,worldSpace.y);  48.        CCLog("nodeSpace.x=%f,nodeSpace.y=%f",nodeSpace.x,nodeSpace.y);  49.        CCLog("worldspaceAR.x=%f,worldspaceAR.y=%f",worldSpaceAR.x,worldSpaceAR.y);  50.        CCLog("nodeSpaceAR.x=%f,nodeSpaceAR.y=%f",nodeSpaceAR.x,nodeSpaceAR.y);  51.  52.        this->addChild(sprite1);  53.  54.        bRet = true;  55.    } while (0);  56.  57.    return bRet;  58.} 01.bool HelloWorld::init()  02.{  03.    bool bRet = false;  04.    do   05.    {  06.  07.        CC_BREAK_IF(! CCLayer::init());  08.        //opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向  09.        //这里的世界指的是游戏世界  10.        //屏幕坐标系是以左上角为原点,是我们熟悉的  11.  12.        //CCDirector::sharedDirector()->convertToGL 转换到OPENGL坐标系  13.        //CCDirector::sharedDirector()->convertToUI 转换到屏幕坐标系  14.        //CCNode::convertToWorldSpace() 把本地坐标系转换到世界坐标系  15.        //CCNode::convertToNodeSpace()  把世界坐标系转换到本地坐标系  16.  17.        //sprite1、sprite2的图片大小事100,100  18.        CCSprite * sprite1 = CCSprite::create("image1.png");  19.        sprite1->setPosition(ccp(100,100));  20.  21.        //将sprite2添加到sprite1节点中,这时候是以sprite1的左下角为原点,虽然sprite1的锚点是在它图片的中间  22.        CCSprite * sprite2 = CCSprite::create("image2.png");  23.        //setPosition中设置的坐标是sprite2的本地坐标  24.        sprite2->setPosition(ccp(100,100));  25.        sprite1->addChild(sprite2);  26.  27.        //getPosition中获得的坐标也是sprite2的本地坐标  28.        CCPoint point = sprite2->getPosition();  29.        CCLog("point.x=%f,point.y=%f",point.x,point.y);  30.  31.        //获得sprite2的opengl坐标系,屏幕坐标系,世界坐标系,本地坐标系  32.          33.        //convertToWorldSpace的传入参数是sprite2的节点坐标系(本地坐标),也就是setPosition中传入的参数,而convertToNodeSpace的传入参数是sprite2的世界坐标系  34.        CCPoint worldSpace = sprite1->convertToWorldSpace(point);  35.        CCPoint nodeSpace = sprite1->convertToNodeSpace(worldSpace);  36.  37.        //一下俩个函数完成同样的功能,只不过这次的sprite2的坐标是基于sprite1的锚点的,而不是左下角了,所以我们传入了ccp(50,50)  38.        CCPoint worldSpaceAR = sprite1->convertToWorldSpaceAR(ccp(50,50));  39.        CCPoint nodeSpaceAR = sprite1->convertToNodeSpaceAR(worldSpaceAR);  40.  41.        //convertToUI中传入的是opengl坐标系,因为opengl坐标和世界坐标系是相同的,所以我们传入世界坐标  42.        CCPoint ui = CCDirector::sharedDirector()->convertToUI(worldSpace);  43.        CCPoint opengl = CCDirector::sharedDirector()->convertToGL(ui);  44.  45.        CCLog("opengl.x=%f,opengl.y=%f",opengl.x,opengl.y);  46.        CCLog("ui.x=%f,ui.y=%f",ui.x,ui.y);  47.        CCLog("worldspace.x=%f,worldspace.y=%f",worldSpace.x,worldSpace.y);  48.        CCLog("nodeSpace.x=%f,nodeSpace.y=%f",nodeSpace.x,nodeSpace.y);  49.        CCLog("worldspaceAR.x=%f,worldspaceAR.y=%f",worldSpaceAR.x,worldSpaceAR.y);  50.        CCLog("nodeSpaceAR.x=%f,nodeSpaceAR.y=%f",nodeSpaceAR.x,nodeSpaceAR.y);  51.  52.        this->addChild(sprite1);  53.  54.        bRet = true;  55.    } while (0);  56.  57.    return bRet;  58.} 

0 0
原创粉丝点击