2017-02-15 5 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は、物理学のボディが同じままではないので、常にスケーリングについて問題を抱えています。物理的性質の間に「連続性」はありません。だから、これは良い方法ではありません。

私は、ノードとphysicsBodies区別に注意を集中したい

:それはphysicsBodyをだとあなたは2つの壁を構築することができ、あなたがそれらのいずれかを必要としないときは、ノードを非表示にishidden = trueを作ることができると物理学を無効にするisDynamic = falseを設定相互作用。 それで、あなたは内部を隠すことができ、物理的なやり取りを無効にして物理的に外壁を有効にした後で、内部の壁には本体があります。

古い境界と新しい壁境界の間の遷移については、2つのノード間のアニメーションを調べることができます。

+0

ありがとうございました。 2つの物理学の間の遷移は、私が現在持っているものと同じになります。私はまだアニメーションを行う方法についています。 – bcattle

+0

内部ノードの物理ノードをオフにしてから、内部ノードを使用してアニメーションを作成し、外壁のようになります(physicsBodyを除く)。最後に非表示にする(外部ノードを表示する)。結局のところ、隠された内部ノードを元の次元に報告する –

関連する問題