我有一个用SKPhysicsBody创建的大矩形SKPhysicsBody(edgeLoopFrom:...)。在那个物理体内,有一束反弹的球。出现通知时,我从屏幕底部显示一个视图。我想调整SKPhysicsBody的大小,以便当此通知视图在屏幕上时,球会从该通知视图反弹。

我现在要做的是

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

换句话说,我只是用新的尺寸替换了旧的物理身体。这是可行的,但是如果在旧尺寸和新尺寸之间的区域中的任何球变为,它们都会被困住并从墙外反弹并掉出世界。

是否有一种优雅的方法可以使新旧墙之间的过渡变得生动有趣,从而使位于底部的任何球都被“扫掠”到新的尺寸,并保证留在墙内? You can't scale an SKPhysicsBody directly

最佳答案

在这种情况下,与其调整物理实体的大小,不如创建一个节点来表示通知,可能会更容易。也就是说,制作一个不渲染任何东西的SKNode,在其上附加与通知视图相同大小的物理实体,然后将节点与通知视图一起移动。您可以为节点移动创建动画,动画的速度与视图动画化的速度相同。这样应该会给您所需的效果,而不会使物理模拟混乱。

关于ios - 调整SKPhysicsBody边缘的大小并将 child 放在里面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42239104/

10-11 16:14