convertToWorldSpace用于将一个相对坐标转化为绝对坐标,convertToNodeSpace则是将一个绝对坐标转化为一个相对坐标。
这里的相对坐标指的是相对于某一个CCNode的坐标(CCNode左下角为0,向右向上为正),这里的绝对坐标是相对于屏幕的坐标(屏幕左下角为0,向右向上为正)。
下面结合一个例子进行理解。
如上图所示,Screen框代表屏幕大小,Sprite框为一个CCSprite实例的大小,Map框为一个大地图的大小。对应的情景是一张大地图,手机屏幕显示地图的一部分,屏幕上显示了一个精灵,Map,Scrren,Sprite三者的中心重合。
我们执行如下代码,分析结果(layer是的锚点(0,0),位置(0,0),所以layer的坐标系等同于Map)
print("mapNode:", layer:convertToNodeSpace(ccp(0,0)).x, layer:convertToNodeSpace(ccp(0,0)).y)
print("spriteNode:", sprite:convertToNodeSpace(ccp(0,0)).x, sprite:convertToNodeSpace(ccp(0,0)).y)
print("mapWorld:", layer:convertToWorldSpace(ccp(0,0)).x, layer:convertToWorldSpace(ccp(0,0)).y)
print("spriteWorld:", sprite:convertToWorldSpace(ccp(0,0)).x, sprite:convertToWorldSpace(ccp(0,0)).y)
输出结果为:
mapNode: 161 129
spriteNode: -176 -96
mapWorld: -161 -129
spriteWorld: 176 96
a) 第一行表示将相对于 屏幕位置为(0,0)的坐标转化为相对于 Map的坐标
相对于屏幕位置为(0,0)就是屏幕的左下角,而Map的相对坐标系以Map左下角为原点,向右向上为正,而屏幕左下角距离Map左下角横向距离161,纵向距离129,所以屏幕左下角相对于Map左下角的坐标为(161,129)
a) 第二行表示将相对于屏幕位置为(0,0)的坐标转化为相对于Sprite的坐标
相对于屏幕位置为(0,0)就是屏幕的左下角,而Sprite的相对坐标系以Sprite左下角为原点,向右向上为正,而屏幕左下角距离Sprite左下角横向距离176且在其左侧(负方向),纵向距离96且在其下方(负方向),所以屏幕左下角相对于Sprite左下角的坐标为(-176,-96)
c) 第三行表示将相对于Map位置为(0,0)的坐标转化为相对于屏幕的坐标
相对于Map位置为(0,0)就是Map的左下角,而屏幕的相对坐标系以屏幕左下角为原点,向右向上为正,而Map左下角距离屏幕左下角横向距离161且在其左侧(负方向),纵向距离129且在其下方(负方向),所以Map左下角相对于屏幕左下角的坐标为(-161,-129)d) 第四行表示将相对于Sprite位置为(0,0)的坐标转化为相对于屏幕的坐标
相对于Sprite位置为(0,0)就是Sprite的左下角,而屏幕的相对坐标系以屏幕左下角为原点,向右向上为正,而Sprite左下角距离屏幕左下角横向距离176,纵向距离96,所以屏幕左下角相对于Map左下角的坐标为(176,96)