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.}
世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系
最新推荐文章于 2021-05-31 22:57:19 发布