在cocos2d-x中大部分对象都是一节点的形式存在的,并且当前节点所在的坐标系由其父节点决定,因此,每个父子节点间便维护着一个它俩坐标系,如果不明白这些特性,极有可能在程序中发现了某个节点位置不对,但却找不到问题所在,因此这里引入一篇有关cocos2d-x坐标及节点大小方面的博文,希望大家看完之后能和我一起弄清它们间的差别!


【转载自Bill_Ming】:http://blog.csdn.net/bill_ming/article/details/9078781


       CCNode类的setPosition,getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标(原点为父节点左下角)。

       另一个关键问题就是在cocos2d-x里就是各种对象的大小问题。因为在cocos2d-x里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d-x里提供了对应函数来完成这些操作:
getContentSize函数来获得节点原始的大小。只是逻辑尺寸,不是像素
boundingBox函数来获得经过缩放和旋转之后的外框盒大小。
getContentSizeInPixels获得的是像素点大小

像素点和逻辑点关系:逻辑点大小 = 像素大小/contentScaleFactor.
getVisibleSize:默认获得视口(可视区域)的大小,若是DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize便是getWinSize。

getVisibleOrigin:默认可视区域的出发点坐标,这在处理相对位置的时候很是有效,确保节点在不合辨别率下的位置一致。


坐标转换:
GL坐标系,cocos2d-x默认坐标系:
CCPoint CCDirector::convertToGL(const CCPoint& uiPoint)
{
    CCSize s = m_obWinSizeInPoints;
    float newY = s.height - uiPoint.y;
}
屏幕坐标系:   默认原点在左上角
CCPoint CCDirector::convertToUI(const CCPoint& glPoint)
{
    CCSize winSize = m_obWinSizeInPoints;
    float oppositeY = winSize.height - glPoint.y;

    return ccp(glPoint.x,oppositeY);
}

两种坐标的X方向没有变,只变了Y方向,cocos2d-x里默认的GL坐标系,即左下角为原点ccp(0.0f,0.0f)