SpriteKit - 在节点上更改anchorpoint会更改所有子节点的位置

时间:2013-12-29 19:01:36

标签: ios objective-c sprite-kit

我对SpriteKit中的anchorpoint感到非常困惑。

如果我有一个由多个子节点组成的节点,并且我更改了节点的锚点,那么所有的子节点都会被放错地方。有没有办法解决这个问题?

我认为如果我总是使用默认的锚点(0.5,0.5),定位节点真的很烦人,所以有时我会将锚点更改为1.0,0.0,因此它很容易放在右下角。但是如果这个节点有子节点,那么当我改变锚点时它们都是错位的。

我错过了什么?

1 个答案:

答案 0 :(得分:5)

  1. 尽可能避免更改默认的anchorPoint。
  2. 如果您确实更改了anchorPoint,请确保仅在没有子节点的节点上执行此操作。
  3. 在您的情况下(一般而言)修复相对容易。不是将子节点添加到其anchorPoint已更改的sprite节点,而是使用公共父节点(SKNode)。将精灵节点添加到父节点,更改精灵的anchorPoint但不添加任何子节点。而是将这些子项添加到父节点。然后,您可以使用父节点将节点树的此分支放在一起。

    或者使用允许您将节点与特定边框对齐的方法创建SKSpriteNode(或类别)的子类,同时考虑精灵的帧大小和anchorPoint。例如,您可以添加两个属性verticalAlign和horizo​​ntalAlign,其中心,左/上和右/下对齐。每当更改position属性时,该点在传递给super setPosition之前都会被偏移,以便遵循对齐模式。