关于Armature使用convertToWorldSpace转换坐标的问题

关于Armature使用convertToWorldSpace转换坐标的问题

在引出我的问题之前,我们先测试一下正常的情况,将一个Sprite对象放入到场景中,如下代码


local node = cc.Sprite:create("face.jpg")
-- ccs.ArmatureDataManager:getInstance():addArmatureFileInfo("test.png","test.plist","test.xml")
-- local node = ccs.Armature:create("test")

node:setPosition(100, 100)
node:setAnchorPoint(0.5,0.5)
self:addChild(node)
local localOrg = cc.p(0,0)
local worldPos = cc.p(60,60)

local contentSize1 = node:getContentSize()
local AnchorPoint1 = node:getAnchorPointInPoints()
local boundingBox1 = node:getBoundingBox()
local toWorldpos1 = node:convertToWorldSpace(localOrg)
local toWorldposAR1 = node:convertToWorldSpaceAR(localOrg)
local toLocalPos1 = node:convertToNodeSpace(worldPos)
local toLocalPosAR1 = node:convertToNodeSpaceAR(worldPos)

node:setScale(0.6)

local contentSize2 = node:getContentSize()
local AnchorPoint2 = node:getAnchorPointInPoints()
local boundingBox2 = node:getBoundingBox()
local toWorldpos2 = node:convertToWorldSpace(localOrg)
local toWorldposAR2 = node:convertToWorldSpaceAR(localOrg)
local toLocalPos2 = node:convertToNodeSpace(worldPos)
local toLocalPosAR2 = node:convertToNodeSpaceAR(worldPos)

在未缩放的情况下其各参数结果为:
contentSize1: 163,140
AnchorPoint1: 82,70
boundingBox1: 18,30, 163,140
toWorldpos1: 18,30
toWorldposAR1: 100,100
toLocalPos1: 42,30
toLocalPosAR1: -40,-40

在设置缩放为0.6情况下其各参数结果为:
contentSize2: 163,140
AnchorPoint2: 82,70
boundingBox2: 51,58, 98,84
toWorldpos2: 51,58
toWorldposAR2: 100,100
toLocalPos2: 15,3
toLocalPosAR2: -67,-67

这里,从sprite的本地坐标的原点(0,0)转换到世界坐标都是正确的

现在,将Sprite改为一个同样大小的Armature对象放入到场景中,将上面注释第一行代码,打开第二三行代码,如下


-- local node = cc.Sprite:create("face.jpg")
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo("test.png","test.plist","test.xml")
local node = ccs.Armature:create("test")

在未缩放的情况下其各参数结果为:
contentSize1: 163,140
AnchorPoint1: 82,70
boundingBox1: 18,30, 163,140
toWorldpos1: 82,52
toWorldposAR1: 100,100
toLocalPos1: -22,8
toLocalPosAR1: -40,-40

在设置缩放为0.6情况下其各参数结果为:
contentSize2: 163,140
AnchorPoint2: 82,70
boundingBox2: 51,58, 98,84
toWorldpos2: 89,71
toWorldposAR2: 100,100
toLocalPos2: -49,-18
toLocalPosAR2: -67,-67

问题来了,这里前面三个值(contentSize,AnchorPoint,boundingBox)都是没问题的,ok
再来看第四个第六个值(toWorldpos1,toLocalPos)是怎么回事?

转换到世界坐标,以及从世界坐标转换过来,都是如何计算出来的?为何跟Sprite的结果不一样?按找我自己算出了的结果应该和Sprite的一样才对吧?
请问这里是怎么回事,这是一个bug吗?还是Armature有什么特别之处没注意到?

我在lua里也遇到问题了,刚看了一个cpp的坐标转换,感觉明白了,可在lua里又不对了,真是不知道如何是好了

请教一下: 第15行 local toWorldposAR1 = node:convertToWorldSpaceAR(localOrg)
localOrg 参数能改成(60,60)吗,我的算出来就不对了,求解