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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值