2

2 つの SKSpriteNode を子として別の SKSpriteNode に追加しています。コードは次のようになります。

let parentNode = SKSpriteNode(imageNamed: "ParentImage")
parentNode.position = CGPointMake(0,0)
parentNode.zPosition = 0
let child1 = SKSpriteNode(imageNamed: "ChildImage1")
child1.position = CGPointMake(0,0)
parentNode.addChild(child1)
child1.zPosition = -10
let child2 = SKSpriteNode(imageNamed: "ChildImage2")
child2.position = CGPointMake(0,0)
parentNode.addChild(child2)
child2.zPosition = 10

シーンに parentNode を追加すると、z 平面内のスプライトの順序は後ろから前になります。

  • 親ノード
  • 子1
  • 子2

そして時々、期待される

  • 子1
  • 親ノード
  • 子2

子がparentNodeの下にある場合、zPositionプロパティは上書きされますか? 誰かがこのようなバグに遭遇したか、修正を知っていますか?

GameViewController で、skView.ignoresSiblingOrder = true に設定するとfalse、毎回最初の動作 (parentNode、child1、child2) が取得されます。

4

2 に答える 2

0

問題は修正されました。いくつかのことを試したので、何が解決したのか100%確信できません。ignoresSiblingOrder を false に設定してから true に戻し、一番上に表示されていた childNode の定義を親と同じ関数に移動し、最後に (これが修正の理由であると思われます)、次の順序を移動しました。 addChild と zPosition の設定 (私のプロジェクトでは、順序はもともとchild1.zPosition,parentNode.addChildでした。後続の兄弟の順序が zPosition を混乱させていたと思われるため、これら 2 つの順序を変更するとおそらく問題が解決しました)。

于 2015-12-21T13:16:04.877 に答える
0

コンテナーとして機能するノードを追加してから、他の 3 つのノードをそのノードの子として追加することをお勧めします。そうすれば、3 つのノードが兄弟として機能し、必要に応じてそれらのzPosition.

于 2015-12-21T13:01:08.010 に答える