gpt4 book ai didi

ios - 移动父对象时如何保持子 SKNode 速度?

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:46 24 4
gpt4 key购买 nike

我正在使用 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 的新手)
谢谢!

最佳答案

如果您希望子项的速度相对于其父项,请在 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 是一个 CGVector 数组,其中包含每个 child 的速度。

关于ios - 移动父对象时如何保持子 SKNode 速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34891736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com