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.