cocos2d-x坐标系

项目中有个需求“刮刮卡”,在手指触摸屏幕时,需要动态检查当前触摸的点是否“碰”到某个卡了,如果碰到了就把它显示出来。这里就需要了解一下IOS的坐标系统与OpenGL的坐标系统了

 

常见的三种坐标系:

 

UI坐标系,起点(0, 0),位于屏幕左上角, 也称屏幕坐标系,如下图所示

 

 

Direct3D坐标系,使用的是左手坐标系(Left-hand Cartesian Coordinate System),Z轴向里

 

OpenGL的坐标系,右手坐标系(Right-hand Cartesian Coordinate System),Z轴向外

 

如果在2D的的世界里,我们只讨论X、Y,实际上就变成二种坐标系了:以左上角为原点、以左下角为原点。这样来看的话,它们唯一的区别就在于Y轴,也就是说它们之前的转换只需要使用(winHeight – y)便可得到在另外一种坐标系的坐标。

 

cocos2d-x返回的点,是它在UI坐标系中的位置,使用CCPoint pt = pTouch->getLocationInView()获得UI坐标系中的坐标点,然后将其转换为OpenGL坐标系的坐标CCDirector::sharedDirector()->convertToGL(touchLocation);

 

使用convertToWorldSpace方法,可将相应的卡片坐标转换为OpenGL中的坐标,然后对它的width、height处理,就可以得到该卡片所占的区域。node的getPosition()只是获得该节点相对它的你节点的位置,所以convertToWorldSpace方法的调用应该如下所示:

nodeParent->convertToWorldSpace(node->getPosition())

 

 

关于cocos2d-x的坐标系的更多信息,可参考这里:

http://www.cocos2d-x.org/wiki/Coordinate_System

posted @ 2013-11-19 16:54  meteoric_cry  阅读(1333)  评论(0编辑  收藏  举报