如何将Cocostudio通过Json生成的Scene里面的精灵坐标转换为GL坐标

这个是Cocostudio的JSON例子,请问一下如何将hostCity这个组件的坐标转换为GL坐标。
我通过这样的方法转换我觉得是不对的?

auto hostCity = (node->getChildByTag(10004)->getChildByTag(10006)->getComponent(“CCSprite”)->getOwner());
auto position = hostCity->getPosition();
auto posInGL = Director::getInstance()->convertToGL(position);

首先position的坐标是对于Parent节点的坐标,而Parent节点上面又嵌套了几层节点,我感到非常凌乱,请帮助。

HostCity:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “hostCity”,
“canedit”: true,
“objecttag”: 10006,
“rotation”: 0,
“scalex”: 0.9545453,
“scaley”: 0.969697,
“visible”: 1,
“x”: 1.8181819915771484,
“y”: 34.510482788085938,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/host.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],

JSON文件:
{
“classname”: “CCNode”,
“name”: null,
“canedit”: true,
“objecttag”: 10000,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 0,
“y”: 0,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “bg”,
“canedit”: false,
“objecttag”: 10004,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 512,
“y”: 384,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “oregrass”,
“canedit”: true,
“objecttag”: 10004,
“rotation”: 0,
“scalex”: 0.6850392,
“scaley”: 0.664948463,
“visible”: 1,
“x”: -163.4827880859375,
“y”: 59.198272705078125,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “ore”,
“canedit”: true,
“objecttag”: 10006,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: -3.6494255065917969,
“y”: 0,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/ore.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/grass.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “altargrass”,
“canedit”: true,
“objecttag”: 10008,
“rotation”: 0,
“scalex”: 0.364241064,
“scaley”: 0.357803017,
“visible”: 1,
“x”: 81.482704162597656,
“y”: -50.146541595458984,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “altar”,
“canedit”: true,
“objecttag”: 10009,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: -14.132185935974121,
“y”: 33.305534362792969,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/bluefire.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/grass.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “hostCity”,
“canedit”: true,
“objecttag”: 10006,
“rotation”: 0,
“scalex”: 0.9545453,
“scaley”: 0.969697,
“visible”: 1,
“x”: 1.8181819915771484,
“y”: 34.510482788085938,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/host.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/Background.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “bigstonegrass”,
“canedit”: true,
“objecttag”: 10026,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 616.28851318359375,
“y”: 486.43368530273438,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “bigStone”,
“canedit”: false,
“objecttag”: 10011,
“rotation”: 0,
“scalex”: 1.13181794,
“scaley”: 1.12424242,
“visible”: 1,
“x”: 0.31766128540039062,
“y”: 22.232345581054688,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/stone.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “forgegrass”,
“canedit”: true,
“objecttag”: 10015,
“rotation”: 0,
“scalex”: 0.5781251,
“scaley”: 0.6041667,
“visible”: 1,
“x”: 420.72744750976562,
“y”: 373.783203125,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “forgefactory”,
“canedit”: false,
“objecttag”: 10014,
“rotation”: 0,
“scalex”: 0.4858425,
“scaley”: 0.5085952,
“visible”: 1,
“x”: 7.8116798400878906,
“y”: 5.8731937408447266,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/blacksmith.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “weapongrass”,
“canedit”: true,
“objecttag”: 10016,
“rotation”: 0,
“scalex”: 0.5227273,
“scaley”: 0.6666667,
“visible”: 1,
“x”: 475.7962646484375,
“y”: 325.50531005859375,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “weaponfactory”,
“canedit”: false,
“objecttag”: 10013,
“rotation”: 0,
“scalex”: 0.562137,
“scaley”: 0.390957683,
“visible”: 1,
“x”: 0.79710197448730469,
“y”: 12.500000953674316,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/militaryCamp.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “tree1”,
“canedit”: true,
“objecttag”: 10018,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 366.99456787109375,
“y”: 336.19656372070312,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/tree.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “tree2”,
“canedit”: true,
“objecttag”: 10017,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 323.91766357421875,
“y”: 303.88888549804688,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/tree.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “forest”,
“canedit”: true,
“objecttag”: 10019,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 410.03414916992188,
“y”: 292.42440795898438,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/forest.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “stones”,
“canedit”: true,
“objecttag”: 10020,
“rotation”: 4.35733175,
“scalex”: 0.8,
“scaley”: 0.8,
“visible”: 1,
“x”: 472.78277587890625,
“y”: 253.17242431640625,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “1”,
“canedit”: true,
“objecttag”: 10023,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: -11.165045738220215,
“y”: -14.563102722167969,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/stone2.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “2”,
“canedit”: true,
“objecttag”: 10024,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 14.563103675842285,
“y”: -28.155330657958984,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/stone3.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “3”,
“canedit”: true,
“objecttag”: 10025,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: -22.927749633789062,
“y”: -47.908176422119141,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/stone4.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/stone1.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “watergrass”,
“canedit”: true,
“objecttag”: 10027,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 448.29833984375,
“y”: 488.98504638671875,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “water”,
“canedit”: false,
“objecttag”: 10012,
“rotation”: 2.17774415,
“scalex”: 0.466565043,
“scaley”: 0.536741257,
“visible”: 1,
“x”: -2.5862064361572266,
“y”: 6.0344820022583008,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/water.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “firegrass”,
“canedit”: true,
“objecttag”: 10028,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 725.0223388671875,
“y”: 369.157470703125,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “fire”,
“canedit”: false,
“objecttag”: 10010,
“rotation”: 0,
“scalex”: 0.6000001,
“scaley”: 0.6270396,
“visible”: 1,
“x”: 0,
“y”: 0,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/fire.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “altar”,
“canedit”: true,
“objecttag”: 10029,
“rotation”: 0,
“scalex”: 0.430709243,
“scaley”: 0.388603956,
“visible”: 1,
“x”: 623.29815673828125,
“y”: 427.77813720703125,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/stove.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “crystalgrass”,
“canedit”: true,
“objecttag”: 10031,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 266.40170288085938,
“y”: 385.53680419921875,
“zorder”: 1,
“gameobjects”:
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “crystal”,
“canedit”: false,
“objecttag”: 10030,
“rotation”: 0,
“scalex”: 0.596954644,
“scaley”: 0.6379314,
“visible”: 1,
“x”: 2.5862066745758057,
“y”: 9.482757568359375,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “buildings/crystal.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“components”:
{
“__type”: “ComSpriteSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCSprite”,
“name”: “CCSprite”,
“file”: null,
“fileData”: {
“path”: “envir/qiancao.png”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
},
{
“__type”: “ComGameObjectSurrogate:#EditorCommon.JsonModel”,
“classname”: “CCNode”,
“name”: “light”,
“canedit”: true,
“objecttag”: 10029,
“rotation”: 0,
“scalex”: 1,
“scaley”: 1,
“visible”: 1,
“x”: 339,
“y”: 731.75,
“zorder”: 1,
“gameobjects”: ],
“components”:
{
“__type”: “ComParticleSystemSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCParticleSystemQuad”,
“name”: “CCParticleSystemQuad”,
“file”: null,
“fileData”: {
“path”: “particle/light.plist”,
“plistFile”: “”,
“resourceType”: 0
}
}
]
}
],
“CanvasSize”: {
“_height”: 768,
“_width”: 1024
},
“Triggers”: null,
“Version”: “1.5.0.1”,
“components”:
{
“__type”: “ComSceneSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCScene”,
“name”: “CCScene”,
“scenename”: “RPGGame”
},
{
“__type”: “ComSimpleAudioSurrogate:#EditorCommon.JsonModel.Component”,
“classname”: “CCBackgroundAudio”,
“name”: “CCBackgroundAudio”,
“file”: null,
“fileData”: {
“path”: null,
“plistFile”: null,
“resourceType”: 0
},
“loop”: 0
}
]
}

还需要把position转换成world坐标

版主,怎么转?不能转成GS坐标,一定要World坐标吗?

已经解决,请参考我另外一封帖子。
主要是坐标系转换的问题:
1.Touch是GL坐标系或者世界坐标系,不是屏幕坐标系
2.将Touch转换Node的本地坐标系进行判断
3.生成正确的判断矩形