【问题标题】:Changing only anchor point not position仅更改锚点而不更改位置
【发布时间】:2014-07-19 00:58:35
【问题描述】:

如何改变锚点而不改变位置??

我有一个锚点为 0,0 的精灵。

但是,我想临时更改锚点 0.5,0.5,因为我想旋转精灵。

我想做的就是这样。

  CGPoint anchorPointOriginal = ccp(0,0);
  CGPoint anchorPointTemp = ccp(0.5,0.5);


  [mySprite setAnchorPoint:anchorPointTemp];

  //Rotate

  [mySprite setAnchorPoint:anchorPointOriginal];

但是当我改变锚点时, sprite 也会根据新的锚点移动位置

是否可以保持精灵位置只改变锚点??

【问题讨论】:

  • 为什么要锚点为(0,0)?
  • 我需要使用 0,0 锚点进行第一次产卵。它似乎从左下角放大

标签: cocos2d-iphone


【解决方案1】:

在更改锚点时尝试更改精灵的位置。比如……

mySprite.anchorPoint = anchorPointTemp;

mySprite.position = CGPointMake(mySprite.position.x+mySprite.size.width/2,
             mySprite.position.y+mySprite.size.height/2);

这将改变锚点并移动精灵以正确补偿位置变化(由于锚点变化)。

如果要将锚点更改回 CGPointZero,则需要撤消此操作。

【讨论】:

  • 谢谢!它符合我的观点。每次更改锚点时,我都需要更改和计算。
  • 更好:使精灵成为sknode的子节点,偏移精灵的位置但保持锚点不变,然后旋转父sknode以围绕sknode所在的位置旋转精灵
【解决方案2】:

如果您使用的是 cocos2d-iphone 2.0 或更高版本,那么您可以简单地使用
ignoreAnchorPointForPosition 属性

mySprite.ignoreAnchorPointForPosition = YES;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多