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之坐标系所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)