web-dev-qa-db-ja.com

SKSpriteNodeを前面に表示するにはどうすればよいですか?

SKSpriteNodeを他のすべてのノードの前面に移動するにはどうすればよいですか?

UIViewでは、bringSubviewToFrontを使用してuiviewを他のビューの前面に表示できます。

32
Phuong Ly

「前面に出す」ことはできませんが、zPositionを変更できます。

ノードのzPositionが高いほど、後でレンダリングされます。

したがって、zPositionsが-1、0、1の3つのノードがある場合、-1が後ろに表示されます。次に0です。その後、1が前面に表示されます。

すべてがデフォルトのzPosition 0.0を使用している場合、親ノードの子配列に表示される順序でレンダリングされます。

あなたはそれをすべてドキュメントで読むことができます。

https://developer.Apple.com/documentation/spritekit/sknode

52
Fogmeister

Swift 4:私は通常、列挙型を作成してzPositionsを確立するため、さまざまなレイヤーを簡単に管理できます。

_enum ZPositions: Int { case background case foreground case player case otherNodes }_

  • 「ケースの背景」は下の位置で、デフォルトの位置0と同じです。
  • 「前景ケース」= 1
  • 「ケースプレーヤー」= 2
  • 「他のノードの場合」= 3

したがって、新しいアイテムをセットアップするときは、次の方法でzPositionを指定できます。

button.zPosition = CGFloat(ZPosition.otherNodes.rawValue)

(ボタンのzPositionが最も高くなりました)参考になれば幸いです...

4
DaniChi

この拡張機能は、bringToFrontメソッドをSKNodeに追加します。これは、zPositionが不適切で、兄弟の順序付けに依存したい場合に最適です。

extension SKNode {
    func bringToFront() {
        guard let parent = parent else { return }
        removeFromParent()
        parent.addChild(self)
    }
}

`

1
Graham Perks

ノードを最前面に移動したい場合は、これを使用します。

yourNode.zPosition = 1

または最後に:

yourNode.zPosition = -1

または他のノードと同じレベル(デフォルトでこの値に設定されているため):

yourNode.zPosition = 0

0
emido333