1

我有一个SKPhysicsBodySKPhysicsBody(edgeLoopFrom:...). 在那个物理体内是一堆弹跳的球。当出现通知时,我会从屏幕底部显示一个视图。我想调整SKPhysicsBody它的大小,以便球在屏幕上时从这个通知视图反弹。

我现在做的是

func updateWalls() {
    let wallInsets = UIEdgeInsetsMake(bottomWallInset, 0, 0, 0)
    scene.physicsBody = SKPhysicsBody(edgeLoopFrom:UIEdgeInsetsInsetRect(bounds, wallInsets))
}

换句话说,我只是用具有新维度的新物理体替换旧物理体。这是可行的,除了如果任何球在旧维度和新维度之间的区域内,它们就会被困住并从墙外反弹并掉出世界。

是否有一种优雅的方式来为新旧墙边界之间的过渡设置动画,这样位于底部的任何球都被“扫”到新的尺寸中,并保证留在墙内?您不能SKPhysicsBody直接缩放.

4

2 回答 2

1

在这种情况下,与其调整物理主体的大小,不如创建一个节点来表示通知可能更容易。也就是说,制作一个不渲染任何内容的 SKNode,将物理体附加到它与通知视图相同大小,然后将节点与通知视图一起移动。您可以以与视图动画相同的速度为节点移动创建动画。这应该可以提供您需要的效果,同时减少混淆物理模拟的可能性。

于 2017-02-15T09:52:54.770 回答
0

SpriteKit总是有关于缩放SKPhysicsBody的麻烦,因为physicsBody 不会保持不变,physicsBodies 属性之间没有“连续性”。所以这不是一个好方法。

我想把你的注意力集中在区分节点和物理体上:你可以用它建造两堵墙,physicsBody当你不需要其中一个时,你可以ishidden = true隐藏节点并设置isDynamic = false禁用物理交互。所以,有一次你有内墙和它的身体,在你可以隐藏内部之后,禁用物理交互并启用外墙和它的物理。

关于新旧墙边界之间的过渡,您可以研究两个节点之间的动画。

于 2017-02-15T12:33:19.327 回答