2013-03-14 82 views
0

我几乎已经读取了有关定位点和缩放的所有信息。当我缩放它时,我仍然不知道精灵位置正在发生什么。CCSprite在使用CCScaleToTo或CCScaleBy时移动

的情况是这样的:

,当我在屏幕上点击,精灵的宽度将减少约50%和高度将增加大约相同的比例。然后它将恢复到正常的规模。

id scaleUpAction = [CCEaseInOut actionWithAction:[CCScaleTo actionWithDuration:.35 scaleX:0.5 scaleY:1.5] rate:1.0]; 
id scaleDownAction = [CCEaseInOut actionWithAction:[CCScaleTo actionWithDuration:.35 scaleX:1.0 scaleY:1.0] rate:1.0]; 
CCSequence *scaleSeq = [CCSequence actions:scaleUpAction, scaleDownAction, nil]; 
[self.boxShape runAction:scaleSeq]; 

我不明白为什么缩放使“精灵”“移动”。

如果我在屏幕上的位置(100,100)有一个大小为40x60的精灵,当我缩小它时,它向左移动。为什么?

谢谢。

+1

'scaleX:0.5 scaleY:1.5':这不是每个方向的50%。这在X方向上减少了50%,但是在Y方向上只减少了33%。你可能想要'scaleY:2.0' – 2013-03-14 13:37:45

+0

那就对了。 :) – Quaso 2013-03-14 14:19:38

回答

0

一般来说,当缩放空间时,总是有一个点留在它的位置,其他点则移动。对于CCNode而言,这一点是定位点。因此,选择要保留的节点上的点并使其成为定位点

+0

我已经设置锚点(0.5f,0.5f)这意味着ccnode的中心。 (我认为锚点的默认也是一样的)。 – Quaso 2013-03-14 14:25:17

0

也许图像的定位点不位于图形的质心处。在下一张图片中,您应该将定位点设置为红点,ccp(0.85,0.5)。

Image: Anchor Point, Moon, center of mass

如果你的定位点位于中心(0.5,0.5),当上图水平缩放那么它会移动到左边(仅在视觉上!)。

这是你的问题?

+0

我解决了我的问题。在我的情况下,当精灵的坐标发生变化时,背景会根据精灵的新坐标移动。每次精灵动画(缩放)时,其身体位置也会改变。我认为它缩小时会向左移动。但实际情况是背景移动正确。对我感到羞耻:) – Quaso 2013-03-15 15:02:48