[5]Cocos2d-x之坐标系

[5]Cocos2d-x之坐标系,第1张

概述世界坐标系:也叫绝对坐标系,用来描述其他坐标系的位置。世界坐标系的原点在左下角,x轴向右,y向上。绘制屏幕时,节点元素的本地坐标会映射为世界坐标 GL坐标系:cocos使用的坐标系,原点在左下角,x轴向右,y轴向上。 屏幕坐标系:ios、android、windows phone等都是用屏幕坐标系,原点在屏幕左上角,x轴向右,y轴向下。需要把触摸点转换为OpenGL坐标。 本地坐标系:用于标记节点 世界坐标系:也叫绝对坐标系,用来描述其他坐标系的位置。世界坐标系的原点在左下角,x轴向右,y向上。绘制屏幕时,节点元素的本地坐标会映射为世界坐标
GL坐标系:cocos使用的坐标系,原点在左下角,x轴向右,y轴向上。
屏幕坐标系:ios、androID、windows phone等都是用屏幕坐标系,原点在屏幕左上角,x轴向右,y轴向下。需要把触摸点转换为OpenGL坐标。
本地坐标系:用于标记节点的位置相对于父节点的坐标系,使用position设置的位置为相对于其父节点的位置,与GL坐标系一样。
本地坐标系原点:锚点在左下角,值为(0,0),使用convertToNodeSpace、convertToWorldspace时做为转换坐标参考,与 convertToNodeSpaceAR、convertToWorldspaceAR不一样,带AR使用的是我们设置的锚点,不是原点
坐标转换convertToNodeSpace、convertToWorldspace、convertToNodeSpaceAR、convertToWorldspaceAR的使用
auto sp1 = Sprite :: create( "HelloWorld.png" );sp1 ->setAnchorPoint ( Vec2( 0,0 ));sp1 ->setposition ( Vec2( 300,400 ));this ->addChild ( sp1);auto sp2 = Sprite ::create ( "pk.png" );sp2 ->setAnchorPoint ( Vec2( 1,1 ));sp2 ->setposition ( Vec2( 100,300 ));this ->addChild ( sp2);//参考点(100,300)Vec2 convertNode = sp1 ->convertToNodeSpace ( sp2-> getposition ());Vec2 convertWorld = sp1 ->convertToWorldspace ( sp2-> getposition ());Vec2 convertNodeAR = sp1 ->convertToNodeSpaceAR ( sp2-> getposition ());Vec2 convertWorldAR = sp1 -> convertToWorldspaceAR (sp2 -> getposition());cclOG ("sp1,x: %f,y: %f :",sp1 -> getposition(). x,sp1 ->getposition (). y);               cclOG ("sp2,sp2 -> getposition(). x,sp2 ->getposition (). y);               cclOG ("convert Node,convertNode . x,convertNode. y );               cclOG ("convert World,convertWorld . x,convertWorld. y );               cclOG ("convert Node AR,convertNodeAR . x,convertNodeAR. y );               cclOG ("convert World AR,convertWorldAR . x,convertWorldAR .y );               /*sp1,x: 300.000000,y : 400.000000 :                             sp2,x : 100.000000,y : 300.000000 :                             convert Node,x : -200.000000,y : -100.000000 :                             convert World,x : 400.000000,y : 700.000000 :                             convert Node AR,y : -100.000000 :                             convert World AR,y : 700.000000 :*/               //sp2的坐标原点(-140,60)Vec2 convertNode2 = sp2 ->convertToNodeSpace ( sp1-> getposition ());//300-(-140)=440,400-60=340Vec2 convertWorld2 = sp2 ->convertToWorldspace ( sp1-> getposition ());//300+(-140)=160,400+60=460Vec2 convertNodeAR2 = sp2 ->convertToNodeSpaceAR ( sp1-> getposition ());Vec2 convertWorldAR2 = sp2 ->convertToWorldspaceAR ( sp1-> getposition ());               cclOG ("convert Node2,convertNode2 . x,convertNode2. y );               cclOG ("convert World2,convertWorld2 . x,convertWorld2. y );               cclOG ("convert Node AR2,convertNodeAR2 . x,convertNodeAR2 .y );               cclOG ("convert World AR2,convertWorldAR2 . x,convertWorldAR2 .y );                              //convert Node2,x: 440.000000,y : 340.000000 :                              //convert World2,x : 160.000000,y : 460.000000 :                              //convert Node AR2,x : 200.000000,y : 100.000000 :                              //convert World AR2,y : 700.000000 :

总结: 根据以上例子,可以得出转换世界坐标系与本地坐标系的方法: 1、convertToNodeSpace和convertToWorldspace以坐标原点为参考点,像例子1中的sp2参考点为(300,400),例子2(-140,60)。convertToNodeSpaceAR和convertToWorldspaceAR则以节点所设置的锚点来进行计算 2、需要转换的节点的坐标,这里不需要使用坐标原点,例子1中sp2(100,300),例子2中sp1(300,400) 3、convertToNodeSpace的计算:需转换的节点的坐标-参考点坐标,例子1:(100-300,300-400),例子2(300-(-140),400-60) 4、convertToWorldspace的计算:需转换的节点的坐标+参考点坐标,例子1:(100+300,300+400),例子2(300+(-140),400+60) 总结

以上是内存溢出为你收集整理的[5]Cocos2d-x之坐标系全部内容,希望文章能够帮你解决[5]Cocos2d-x之坐标系所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1057562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存