原作者:@H_301_9@jlins 出处:博客园@H_301_9@http://www.cnblogs.com/dyllove98/p/3231175.html
@H_301_9@@H_301_9@Cocos-2d中,涉及到@H_301_9@4种坐标系:
@H_301_9@GL坐标系@H_301_9@Cocos2D以@H_301_9@OpenglES为图形库,所以它使用@H_301_9@OpenglES坐标系。@H_301_9@GL坐标系原点在屏幕左下角,@H_301_9@x轴向右,@H_301_9@y轴向上。
@H_301_9@屏幕坐标系苹果的@H_301_9@Quarze2D使用的是不同的坐标系统,原点在屏幕左上角,@H_301_9@x轴向右,@H_301_9@y轴向下。@H_301_9@ios的屏幕触摸事件@H_301_9@CCTouch传入的位置信息使用的是该坐标系。因此在@H_301_9@cocos2d中对触摸事件做出响应前需要首先把触摸点转化到@H_301_9@GL坐标系。可以使用@H_301_9@CCDirector的@H_301_9@convertToGL来完成这一转化。
世界坐标系也叫做绝对坐标系。世界坐标系和@H_301_9@GL坐标系一致,原点在屏幕左下角。
(@H_301_9@cocos2d中的元素是有父子关系的层级结构,我们通过@H_301_9@CCNode的@H_301_9@position设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系。最后在绘制屏幕的时候@H_301_9@cocos2d会把这些元素的本地坐标映射成世界坐标系坐标。)
@H_301_9@本地坐标系本地坐标系也叫做物体坐标系,是和特定物体相关联的坐标系。每个物体都有它们独立的坐标系,当物体移动或改变方向时,和该物体关联的坐标系将随之移动或改变方向。比如用@H_301_9@cocos2d-x创建了个矩形@H_301_9@colorLayer:CCRect(10,10,100,100),这是的本地坐标系为以(@H_301_9@10,10)为坐标原点,@H_301_9@x轴向右,@H_301_9@y轴向上。如果创建了一个@H_301_9@CCSprite,锚点为(@H_301_9@0.5,0.5),位置为(@H_301_9@100,100),@H_301_9@size为(@H_301_9@40,40),这时的本地坐标系为以(@H_301_9@80,80)为坐标原点,@H_301_9@x轴向右,@H_301_9@y轴向上。
@H_301_9@@H_301_9@Cocos-2d中,坐标系转换:
@H_301_9@@H_301_9@CCPointconvertToNodeSpace(constCCPoint& worldPoint);
CCPoint convertToWorldSpace(const CCPoint& nodePoint);
CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);
CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);
@H_301_9@@H_301_9@1.CCPointconvertToNodeSpace(constCCPoint& worldPoint);
@H_301_9@@H_301_9@CGPointnodeSpace =[spriteParentconvertToNodeSpace:orignPosition];
将@H_301_9@orignPosition转换为相对于@H_301_9@spriteParent的本地坐标
@H_301_9@@H_301_9@2.CCPointconvertToWorldSpace(const CCPoint& nodePoint);
@H_301_9@@H_301_9@CGPointwordeSpace =[spriteParentconvertToWorldSpace:orignPosition];
将@H_301_9@orignPosition转换为相对于@H_301_9@spriteParent的世界坐标
@H_301_9@@H_301_9@3.CCPointconvertToNodeSpaceAR(const CCPoint& worldPoint);
@H_301_9@@H_301_9@CGPointnodeSpaceAR =[spriteParentconvertToWorldSpace:orignPosition];
将@H_301_9@spriteParent的坐标系原点设置在@H_301_9@spriteParent的锚点位置
然后@H_301_9@ orignPosition转换为相对于@H_301_9@spriteParent的本地坐标
@H_301_9@@H_301_9@4.CCPointconvertToWorldSpaceAR(const CCPoint& nodePoint);
@H_301_9@@H_301_9@CGPointwordeSpaceAR =[spriteParentconvertToWorldSpace:orignPosition];
将@H_301_9@spriteParent的坐标系原点设置在@H_301_9@spriteParent的锚点位置
然后@H_301_9@ orignPosition转换为相对于@H_301_9@spriteParent的世界坐标
@H_301_9@
欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品@H_301_9@iOS、@H_301_9@Cocos、移动设计课程请关注智捷课堂官方网站:@H_301_9@http://www.zhijieketang.com@H_301_9@