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

Hei*_*kov 2 objective-c ios sprite-kit

我对SpriteKit中的anchorpoint非常困惑.

如果我有一个由多个子节点组成的节点,并且我更改了节点的锚点,那么所有的子节点都会被放错位置.有没有办法解决?

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

我错过了什么?

Lea*_*s2D 5

  1. 尽可能避免更改默认的anchorPoint.
  2. 如果您确实更改了anchorPoint,请确保仅在没有子节点的节点上执行此操作.

在您的情况下(一般情况下),修复相对容易.不是将子节点添加到其anchorPoint已更改的sprite节点,而是使用公共父节点(SKNode).将精灵节点添加到父节点,更改精灵的anchorPoint但不添加任何子节点.而是将这些子项添加到父节点.然后,您可以使用父节点将节点树的此分支放在一起.

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