Sprite Kit改变了anchorpoint,但保持物理中心

时间:2014-02-28 12:34:32

标签: objective-c sprite-kit

我有很多不同的精灵节点,物理体与对象的大小相同。对于定位,我需要更改节点的锚点,但这也会改变物理体的位置。有没有办法让物理体的锚点居中?使用物理体的路径是没有选择的,因为我有很多不同的对象。

2 个答案:

答案 0 :(得分:14)

anchorPoint是一个纯粹的视觉属性,它定义了如何相对于节点的位置绘制纹理。物理主体不受更改anchorPoint的影响,它仍然以节点的position为中心。

所以从某种意义上说,物理体确实已经在精灵的位置上居中。通过更改anchorPoint你只是改变了精灵纹理的显示位置,我相信你认为物理体将以sprite的anchorPoint为中心。它没有,因为每个节点都有一个物理体,但只有少数节点(精灵,场景,视频)具有anchorPoint属性。

解决此问题的最佳方法是创建精灵图像,以便始终假定物理体在图像上居中。在图像周围留下透明边框,以确保图像大小始终相同,并且正文的位置正确居中。

您还可以使用SKPhysicsBody bodyWithRectangleOfSize:center:初始化程序来定义正文的中心点,并将其与精灵的anchorPoint进行匹配。但这很棘手,适得其反,因为如果做出最小的变化,你将不得不不断调整body和sprite anchorPoint。

除此之外,最好单独留下anchorPoint,特别是物理。

答案 1 :(得分:0)

一个旧线程,但在谷歌搜索时仍会弹出...这就是我为自己解决问题的方法。

我基本上只是堆叠了我的SKSpriteNodes。最高级别的父节点将接收SKPhysicsBody,以便所有对象保持在一起。如果你将SKPhysicsBody对象作为子节点添加到另一个节点,当施加重力或其他力时,physicsBody基本上会脱离其他节点(图像会在我的情况下悬浮),如果你不是,那么可以返回一些不稳定的结果。小心。

进一步澄清:

  • 没有与之关联的图像/纹理的父节点,只是一个大小,然后是physicsBody。 (此节点具有修改的锚点)
  • 然后我添加了一个具有“body”纹理的子节点。 (必须调整位置以弥补父母的锚点)
  • 最后,我又向“body”节点添加了两个子节点来构成眼睛。

这特别允许您使用基于纹理的SKPhysicsBody或更复杂的没有居中选项的东西。 physicsBody正如我所需要的那样工作,同时仍然能够以修改的锚点允许的方式操纵SKActions。

希望这有助于某人。