【问题标题】:How do I maintain child SKNode velocities when moving the parent?移动父级时如何保持子级 SKNode 速度?
【发布时间】:2016-01-20 04:40:06
【问题描述】:

我正在使用 SpriteKit 在 Swift 中开发游戏。我有一个带有 SKPhysicsBody 的父节点和几个带有自己物理体的子节点。所有子节点相对于父节点都有一定的速度。给父节点一个速度时如何保持该相对速度?这是显示我正在尝试做的伪代码:

let parent:SKNode = SKNode()
let child:SKNode = SKNode()
parent.physicsBody = SKPhysicsBody()
child.physicsBody = SKPhysicsBody()
parent.addChild(child)

child.physicsBody!.velocity = CGVectorMake(dx: 5, dy: 5)
// child now has velocity
parent.physicsBody!.velocity = CGVectorMake(dx: 10, dy:10)
// parent has velocity, but child velocity is still (5,5)

如何设置子速度以使其保持相对于父速度的速度? (例如,一旦给定父级的速度为(10,10),则子级的绝对速度应变为(15,15),以使其相对于父级保持(5,5))。 我尝试使用 SKPhysicsJoint 但这似乎修复了节点并且不允许速度。有什么解决办法吗? (我确定我忽略了一些明显的东西,但我是 SpriteKit 的新手)
谢谢!

【问题讨论】:

    标签: ios swift sprite-kit game-physics skphysicsbody


    【解决方案1】:

    如果您希望孩子的速度相对于其父母,请在update 方法中将父母的速度添加到孩子的恒定速度。例如,

    override func update(currentTime: CFTimeInterval) {
        child.physicsBody?.velocity = CGVectorMake(parentNode.physicsBody!.velocity.dx + 5.0, parentNode.physicsBody!.velocity.dy + 5.0)
    }
    

    顺便说一句,您不应该在 Sprite Kit 中使用 parent 作为变量名,因为它是 SKNode 的属性。

    更新

    您可以使用以下内容遍历父节点的所有子节点。

    override func update(currentTime: CFTimeInterval) {
        for (i, child) in parentNode.children.enumerate() {
            child.physicsBody?.velocity = CGVectorMake(parentNode.physicsBody!.velocity.dx + velocity[i].dx, parentNode.physicsBody!.velocity.dy + velocity[i].dy)
        }
    }
    

    velocity 是一个 CGVectors 数组,其中包含每个孩子的速度。

    【讨论】:

    • 是的,parent 不是我的实际变量名称,只是一个示例。如果有 50 或 60 个孩子,这不是效率低下吗?有没有办法让 SKPhysicsBody 也移动所有孩子,就像孩子被固定一样?
    • 如果不需要孩子独立于父母移动,可以设置每个孩子的physicsBodypinned属性。
    • 是的,问题是我需要它们独立移动,但如果父级移动,它们与父级保持相对速度。有没有可能用某种关节来做到这一点?如果没有,我将使用您建议的方法,但我必须获取父节点中每个节点的列表并单独执行每个节点,这可能效率低下。
    • 物理关节不能这样做。您可以通过循环遍历父节点的 children 数组来更新子节点的速度(请参阅我更新的答案)。
    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2022-01-18
    • 2019-06-15
    相关资源
    最近更新 更多