enum и zPosition проблемы в spriteKit

У меня возникли некоторые проблемы с enum, используемым для установки zPositiion в спрайте Kit. Вот перечисление:

enum Layer:CGFloat {
   case Sky = 0
   case Clouds = 1
   case Background = 2
   case Foreground = 3
   case Character = 4
   case Foreground1 = 5
}

А потом я делю свою сцену на разные слои, чтобы включить дополнительные эффекты. Я добавил worldNode в качестве базового узла spriteKit, а затем его дочерние элементы:

let backGroundMountain = SKSpriteNode(imageNamed: "Scene3BackgroundMountain1")
  backGroundMountain.zPosition = Layer.Background.rawValue
  worldNode.addChild(backGroundMountain)

let backGroundMountainOver = SKSpriteNode(imageNamed: "Scene3BackgroundMountainOver1")
  backGroundMountainOver.zPosition = Layer.Foreground.rawValue
  worldNode.addChild(backGroundMountainOver)

let greenCircle = SKSpriteNode(imageNamed: "green_circle_1")
  greenCircle.zPosition = Layer.Character.rawValue
  backGroundMountainOver.addChild(greenCircle)

let foreGroundMountainRight = SKSpriteNode(imageNamed: "Scene3FrontMountain1")
  foreGroundMountainRight.zPosition = Layer.Foreground1.rawValue
  worldNode.addChild(foreGroundMountainRight)

Как видите, greenCircle является дочерним элементом backGroundMountainOver, а foreGroundMountainRight является дочерним элементом worldNode. Я требую это для эффектов, которые я упоминал ранее.

Проблема в том, что, хотя zPosition of foreGroundMountainRight больше, чем zPosition для greenCircle, последнее появляется поверх первого. Единственный способ решить проблему - это изменить:

… case Foreground1 = 7

Я не понимаю, что это происходит.

1 ответ

Решение

Это происходит потому, что вы добавляете узел greenCircle (zIndex 4) к узлу, который уже находится в zIndex=3 (backGroundMountainOver), давая общее значение zIndex 7. Когда foreGroundMountainRight, который присоединен к мировому узлу (я предполагаю, что по умолчанию zIndex = 0) находится на zIndex = 5.

Другие вопросы по тегам