2017-02-15 48 views
1

我有一个用SKPhysicsBody(edgeLoopFrom:...)创建的大型长方形SKPhysicsBody。在那个物理体里面有一堆弹跳的球。当出现通知时,我会从屏幕底部显示一个视图。我想调整SKPhysicsBody的大小,以便球在屏幕上弹出此通知视图。调整SKPhysicsBody边缘并保持里面的儿童

我现在要做的就是

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

换句话说,我只是用一个新的新维度取代旧的物理身体。这是有效的,除了如果在旧尺寸和新尺寸之间的区域中的任何球是,它们被困在墙壁外并从墙壁外弹出并脱离世界。

是否有一种优雅的方式来创建旧墙和新墙之间的过渡动​​画,以便位于底部的任何球都被“扫掠”到新维度中,并保证保留在墙内? You can't scale an SKPhysicsBody directly

回答

1

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

0

SpriteKit总是遇到缩放SKPhysicsBody的问题,因为physicsBody不会保持不变,在physicsBody属性之间没有“连续性”。所以这不是一个好方法。

我想你的注意力集中在节点和physicsBodies区分:你可以建立2个墙壁与它的physicsBody,当你不需要他们中的一个,你可以做ishidden = true隐藏节点并设置isDynamic = false禁用物理互动。 所以,有一次,当你隐藏内部空间后,你可以使用它的内部墙体,禁用物理交互并使用外部墙体的物理特性。

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

+0

感谢您的帮助。两个物理实体之间的转换将与我现在所做的相同,我只是将其中一个替换为另一个。我仍然坚持如何做动画。 – bcattle

+0

尝试关闭physicalBody到内部节点,然后使用内部节点制作动画,并变成像外部墙(但没有physicsBody)并将其隐藏在末尾(以显示外部节点)。毕竟,将隐藏的内部节点报告给它的原始维度 –