2017-02-15 54 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)並將其隱藏在末尾(以顯示外部節點)。畢竟,將隱藏的內部節點報告給它的原始維度 –