SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody

Posted

技术标签:

【中文标题】SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody【英文标题】:SpriteKit: SKSpriteNode containing another SKSpriteNodes but only one SKPhysicsBody 【发布时间】:2013-10-18 12:01:09 【问题描述】:

我的游戏中有一个角色,它是一个带有几个子 SKSpriteNode 的 SKSpriteNode,因此我可以为角色的各个部分(手、脚等)制作动画,它还有 1 个 SKSpriteNode(尝试用 SKNode 替换,但它是相同)用 SKPhysicsBody 表示身体。

当我在场景中将角色添加到我的图层时,它只是挂在位置上,并且带有身体的精灵会掉下来。

我的问题和问题是:我怎样才能让我的主要角色精灵中的所有子精灵 - 我怎样才能让我的角色保持在一起?

感谢您的任何想法!

编辑:如何让子精灵与我的容器精灵相连?

【问题讨论】:

【参考方案1】:

重新编辑:

使用 SKNode 控制角色的所有身体部位,包括主体:

SKNode (controller)
  SKSpriteNode (head)
  SKSpriteNode (body)
  SKSpriteNode (leg1)
  SKSpriteNode (leg2)

这为您提供了更大的灵活性。

要使头部成为“主”位置,这应该可以解决问题:

-(void) didSimulatePhysics

    self.parent.position = [self convertPoint:self.position toNode:self.parent.parent];
    self.position = CGPointZero;

【讨论】:

谢谢,我正在这样做,但假设我只需要将物理主体附加到“头部”SKSpriteNode 并且“头部”移动整个“控制器”。并不是说“头”只是让容器响应重力,而是我需要它来“带走”“控制器”。希望你明白我的意思:) 哦,天哪,didSimulatePhysics...我完全忘记了。非常感谢!【参考方案2】:

正如预期的那样,身体正在下落,因为它对重力做出反应。另一个身体部分,如果他们没有物理身体,将留在你放置它们的地方。

一些选项:

1.

如果您希望所有身体部位都是物理身体,那么我建议您查看关节,即销关节 - 例如,它的工作方式类似于肩关节。

这是一个example 的销接头,用于制造带***的汽车。

2.

如果您只是想让它不动,无论出于何种原因。在你的物理身体上,只需设置这个。

bodyNode.physicsBody.dynamic = NO;

【讨论】:

感谢您的回复,斯米克。是的,我明白这一点,但我没有像我想要的那样准确地解释我想要什么。我希望角色(包含所有子精灵)跟随子精灵的身体。对不起我的英语,希望你现在明白我的意思了:)【参考方案3】:

如果我的理解正确,您可以先说 SKScene 上的重力为 0,然后这样做

    self.physicsWorld.gravity = CGVectorMake(0,0);

这将确保您的屏幕角色不会因施加在屏幕上的重力而落入底部。

【讨论】:

【参考方案4】:

可能的解决方案:从子节点中删除 SKPhysicBody 并将其添加到父节点。

【讨论】:

但我需要 SKPhysicsBody 位于子节点中,而不是我角色的根节点中

以上是关于SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit:向场景中添加多个 SKSpriteNode

屏幕上 SKSpriteNode 的 SpriteKit 位置

将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit

Spritekit 通过 touchesBegan 暂停和恢复 SKSpriteNode 的动作

将 UIButton 的属性赋予 SpriteKit 中的 SKSpriteNode

SpriteKit SKTexture 未作为对 SKSpriteNode 的引用传递