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 的动作