cocos2d-X 的坐标转换

                                            本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-X 的坐标转换

用到cocos2d的坐标转换,一般两种情况:

1)从当前坐标点获取世界坐标点(屏幕坐标点,opengl的坐标系)

2)从当前坐标点获取相对于某个CCNode的坐标点;

成员函数

/**  
     * Returns 这个矩阵转换在其父接点里面的空间坐标 
     * 该矩阵以像素为单位。 
     */  
   getNodeToParentTransform();  
    /**  
     * Returns 矩阵在父试图里面的空间坐标转化为节点的空间坐标 
     * 该矩阵以像素为单位。 
     */  
<span style="white-space:pre">  </span>getParentToNodeTransform() const;  
    /**  
     * Returns 现实世界中的 affine(仿射) 变换矩阵. 该矩阵以像素为单位。 
     */  
    getNodeToWorldTransform() const;  
  
      
    /**  
     * Returns 逆现实世界中的 affine(仿射) 变换矩阵. 该矩阵以像素为单位。 
     */  
    virtual AffineTransform getWorldToNodeTransform() const;  


情景分析

第一种情况,直接用:nodeParent->convertToWorldSpace(node->getPosition());
这里一定是需要转换坐标对象的父类调用convertToWorldSpace,参数是对象的坐标点(相对于父类的坐标点);
返回的是屏幕坐标点;
第二种情况,直接用:node2->convertToNodeSpace(node1->getPosition);
node2并不是node1的父类,现在的情况就是:node1想得到相对于node2坐标系的坐标点;
返回的是相对于node2坐标系的坐标点。
以上的调用,是没有考虑nodeParent和node2的anchorPoint的(就是使用了0,0的锚点);考虑到锚点就使用:
convertToWorldSpaceAR()和convertToNodeSpaceAR();具体含义了?
nodeParent->convertToWorldSpaceAR(node->getPosition()):因为默认是0,0的锚点,
所以其得到的坐标点是ccpAdd(nodeParent->convertToWorldSpace(node->getPosition()),ccp(nodeParent- >getContentSize.width*0.5,nodeParent->getContentSize.height*0.5))
node2->convertToNodeSpaceAR(node1->getPosition):因为默认是0,0的锚点,
所以其得到的坐标点是ccpSub(nodeParent->convertToWorldSpace(node->getPosition()),ccp(node2- >getContentSize.width*0.5,node2->getContentSize.height*0.5))
备注:列举出的成员函数是 cocos2d-x 3.0 里面但函数,会和旧版本有所出入,但是旧版本的方法在新版本里面依然使用,只是使用时会提示你使用的方法已经过时。


你可能感兴趣的:(cocos2dx,cocos2d-x)