首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在移动父进程时维护子SKNode速度?

如何在移动父进程时维护子SKNode速度?
EN

Stack Overflow用户
提问于 2016-01-20 04:40:06
回答 1查看 594关注 0票数 2

我正在和SpriteKit一起在斯威夫特玩游戏。我有一个具有SKPhysicsBody的父节点和几个具有自己的物理体的子节点。所有子节点相对于父节点都有一定的速度。当给父节点一个速度时,如何保持相对速度?这里有一些伪代码来展示我想要做的事情:

代码语言:javascript
复制
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的新手)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 06:04:54

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

代码语言:javascript
复制
override func update(currentTime: CFTimeInterval) {
    child.physicsBody?.velocity = CGVectorMake(parentNode.physicsBody!.velocity.dx + 5.0, parentNode.physicsBody!.velocity.dy + 5.0)
}

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

更新

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

代码语言:javascript
复制
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数组,它包含每个子级的速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34891736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档