我正在和SpriteKit一起在斯威夫特玩游戏。我有一个具有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的新手)
谢谢!
发布于 2016-01-20 06:04:54
如果您希望子级的速度相对于其父级,请在update方法中将父级的速度添加到子级的恒定速度中。例如,
override func update(currentTime: CFTimeInterval) {
child.physicsBody?.velocity = CGVectorMake(parentNode.physicsBody!.velocity.dx + 5.0, parentNode.physicsBody!.velocity.dy + 5.0)
}顺便说一句,您不应该在Sprite中使用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数组,它包含每个子级的速度。
https://stackoverflow.com/questions/34891736
复制相似问题