CocosCreator 中坐标转换
Creator中坐标转换有四种方式
1. convertToWorldSpaceAR
将节点坐标系下的一个点转换到世界空间坐标系
targetNode.parent.convertToWorldSpaceAR(targetNode.position);
targetNode 表示需要需要获取世界坐标的目标节点,调用时需要指向 targetNode.parent,targetNode.position 是以parent作为坐标轴原点的
若不使用parent 会导致有一定偏移(具体偏移量为targetNode基于parent的坐标信息),得到的世界坐标的原点为左下角点
2. convertToNodeSpaceAR
将一个点转换到节点 (局部) 空间坐标系,这个坐标系以锚点为原点
targetNode.parent.convertToNodeSpaceAR(transWorldPos)
targetNode.parent 调用此方法,则表示以targetNode.parent做为坐标原点,这样targetNode 的坐标就跟 transWorldPos
隶属与一个坐标系中了,坐标转换 -- > 获取世界坐标 --> 转换到想要的本地坐标 --> 完成
得到的位置信息的原点为 targetNode.parent,creator子节点都是已父节点锚点位置做为坐标原点
这个API转换后也是也锚点做为坐标原点 所以不需要计算锚点偏移
还有两个不带AR 的 API 是为了保持与Cocos2dx 中一致性产生的API,Creator中一般不使用
Cocos2dx 节点原点都是已左下角为原点的 以此为前提我们来看下不带AR的两个API
convertToWorldSpace
targetNode.parent.convertToWorldSpace(targetNode.position)
最终目标位置的计算方式如下 :
targetNode.position.x - targetNode.parent.anchor.x * targetNode.parent.getContentSize().width
targetNode.position.y - targetNode.parent.anchor.y * targetNode.parent.getContentSize().height
然后调用用这个坐标 调用 convertToWorldSpaceAR ,返回值就是 convertToWorldSpace 返回的坐标位置
convertToNodeSpace
argetNode.parent.convertToWorldSpace(transPos);
最终计算方式如下:
transPos.x += targetNode.parent.anchor.x * targetNode.parent.getContentSize().width
transPos.y += targetNode.parent.anchor.y * targetNode.parent.getContentSize().height
endPos = targetNode.parentconvertToWorldSpaceAR(transPos)
最终位置 与 获取世界坐标位置相反 这个是加上 锚点 * 节点宽度
上述就是Creator 中的坐标转换方式