我有很多不同的精灵节点,物理体与对象的大小相同。对于定位,我需要更改节点的锚点,但这也会改变物理体的位置。有没有办法让物理体的锚点居中?使用物理体的路径是没有选择的,因为我有很多不同的对象。
答案 0 :(得分:14)
anchorPoint
是一个纯粹的视觉属性,它定义了如何相对于节点的位置绘制纹理。物理主体不受更改anchorPoint
的影响,它仍然以节点的position
为中心。
所以从某种意义上说,物理体确实已经在精灵的位置上居中。通过更改anchorPoint你只是改变了精灵纹理的显示位置,我相信你认为物理体将以sprite的anchorPoint为中心。它没有,因为每个节点都有一个物理体,但只有少数节点(精灵,场景,视频)具有anchorPoint属性。
解决此问题的最佳方法是创建精灵图像,以便始终假定物理体在图像上居中。在图像周围留下透明边框,以确保图像大小始终相同,并且正文的位置正确居中。
您还可以使用SKPhysicsBody bodyWithRectangleOfSize:center:
初始化程序来定义正文的中心点,并将其与精灵的anchorPoint进行匹配。但这很棘手,适得其反,因为如果做出最小的变化,你将不得不不断调整body和sprite anchorPoint。
除此之外,最好单独留下anchorPoint,特别是物理。
答案 1 :(得分:0)
一个旧线程,但在谷歌搜索时仍会弹出...这就是我为自己解决问题的方法。
我基本上只是堆叠了我的SKSpriteNodes。最高级别的父节点将接收SKPhysicsBody,以便所有对象保持在一起。如果你将SKPhysicsBody对象作为子节点添加到另一个节点,当施加重力或其他力时,physicsBody基本上会脱离其他节点(图像会在我的情况下悬浮),如果你不是,那么可以返回一些不稳定的结果。小心。
进一步澄清:
这特别允许您使用基于纹理的SKPhysicsBody或更复杂的没有居中选项的东西。 physicsBody正如我所需要的那样工作,同时仍然能够以修改的锚点允许的方式操纵SKActions。
希望这有助于某人。