0

所以这是我在这里尝试做的事情的要点。

我有一组前景精灵,我会随着玩家的移动而永远滚动。我想做的是,当玩家开始通过 Y 轴上的某个点时,缩小这些前景精灵,同时仍然移动它们。

当玩家上升时,我希望能够从它们的左下角缩放精灵,并且我已经完成了这项工作,没有任何问题。

真正的问题是,当玩家下来时,我还想从右下角缩放精灵。现在我 认为我可以通过在缩放之前将每个精灵的锚点设置为 1,0 来做到这一点,但这似乎不起作用。精灵仍然从它们的左下角缩放。

我在这里想念什么?

// do logic to identify the scale factor we want

for (CCSprite *sprite in foreground_sprites)
{
    CGPoint old_anchor = sprite.anchorPoint;
    [sprite setAnchorPoint:ccp(1,0)];
    [sprite setScale:scale_factor];
    [sprite setAnchorPoint:old_anchor];
}
4

2 回答 2

0

如果我理解正确,您想在玩家的 Y 位置增加时从左下角进行缩放,但在他们下降时使用右下角进行缩放?

那么你不能只改变锚点。锚点和位置齐头并进,将精灵定位在屏幕上。因此,如果您使用 (0,0) 的锚点将精灵定位在屏幕上,那么如果您想将其锚点切换到 (1,0),同时将其保持在屏幕上的相同位置,您需要更新位置。

CCSprite* sprite = ...;
sprite.anchorPoint = CGPointZero;
sprite.position = CGPointZero;

...

sprite.anchorPoint = CGPointMake(1.0f, 0.0f);
sprite.position = CGPointMake(sprite.position.x + (sprite.contentSize.width * sprite.scaleX * sprite.anchorPoint.x),
                              sprite.position.y + (sprite.contentSize.height * sprite.scaleY * sprite.anchorPoint.y));

希望我正确理解了您的问题并能够提供帮助。

于 2013-10-10T18:48:23.067 回答
0

你试过弄乱这个属性吗?

ignoreAnchorPointForPosition(false);

我用的是cocos2d-x,应该有类似的

于 2013-10-10T08:01:22.487 回答