Sprite Kit - 将两个物理体添加到一个SKNode中

8

是否可以在一个SKNode中添加两个或多个SKPhysicsBody?类似于这样的东西:来自PhysicsEditor的示例。因为角色的头应该与球碰撞,所以顶部应该是圆形的。此外,球不能穿过玩家。你有什么想法如何实现这个?


使用 **+ (SKPhysicsBody )bodyWithBodies:* 方法。 - Jakub Truhlář
3个回答

6
作为 SKNode 上的 physicsBody 属性所示,节点和物理体之间存在一对一的关系。
然而,这并不意味着每个可见精灵都必须具有一个基本形状。您可以采用以下几种方法来实现您要寻找的效果:
  • 顶部真的需要圆角吗?您可以使用矩形覆盖大部分猴子艺术品。(我假设您想要一个圆形顶部,以便碰撞会反弹到不同的方向。)
  • 使用多边形创建您想要的“圆头矩形”形状。您必须选择适合您应用程序的逼近曲线的数量:如果过多,它将减慢物理模拟速度;如果太少,则当其他物体与之碰撞时,它将不像一个圆形那样运动。
  • 每个物体都需要一个节点,但并非每个节点都需要一个可见精灵。您可以用两个节点制作您的猴子:一个节点保存艺术内容,并附有正方形或圆形的物理体,另一个节点具有其他物理体,通过固定关节连接,但没有艺术内容。

2
请注意,iOS 8现在允许您使用bodyWithBodies:将两个物理体添加到一个SKNode中,例如SKPhysicsBody.bodyWithBodies(bodies: AnyObject[]?)。请注意,子物体上的属性(例如质量或摩擦力)将被忽略。只使用子物体的形状。如果您需要具有多个命中目标(例如身体与头部)的节点,则需要执行rickter在第3个要点中建议的操作。 - Jon
这不是真的,你可以使用 **+ (SKPhysicsBody )bodyWithBodies:* 方法设置多个物体。 - Jakub Truhlář

3
这是谷歌上关于这个问题的热门搜索结果,所以我想更新一下答案。根据Mike S在这篇文章中的回答,这是可能的(尽管在2013年可能还没有)。
您需要使用
// Swift
SKPhysicsBody(bodies: <#[AnyObject]#>) 

// Obj-c
[SKPhysicsBody bodyWithBodies:(NSArray *)bodies]

所以您可以将其他身体与一个身体创建,然后将其添加到SKnode中。


0

不行,每个SKNode只能有一个SKPhysicsBody,因为physicsBodySKNode的单一属性。就像rickster所说的那样,你的第一个选择是使用SKPhysicsBodybodyWithEdgeLoopFromRect:类方法来创建一个独立的物理体,使猴子成为一个独立的物理体。

你的另一个选择是创建两个单独的SKNodes,并使用SKPhysicsJointFixed将它们连接起来。rickster的答案很好,但我只是想提供类名,以防你想在Google上搜索一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接