cocos2d-X 的坐标转换

本文详细介绍了在cocos2d-X中进行坐标转换的两种常见情况,包括从当前坐标到世界坐标的转换以及从当前坐标到另一CCNode坐标系的转换。重点解析了convertToWorldSpace()、convertToNodeSpace()及其考虑锚点的变体convertToWorldSpaceAR()和convertToNodeSpaceAR()的使用方法和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                            本文来自http://blog.youkuaiyun.com/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 里面但函数,会和旧版本有所出入,但是旧版本的方法在新版本里面依然使用,只是使用时会提示你使用的方法已经过时。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值