spriteKit 中的枚举和 zPosition 问题
enum and zPosition problems in spriteKit
我在 sprite Kit 中用于建立 zPostiion 的枚举有一些问题。这是枚举:
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 的子节点。我需要这个来实现我之前提到的效果。
问题是虽然foreGroundMountainRight 的zPosition 比greenCircle 的zPosition 大,但最后一个出现在第一个之上。解决问题的唯一方法是更改:
… case Foreground1 = 7
我不明白这是怎么回事。
发生这种情况是因为您在已经处于 zIndex=3 (backGroundMountainOver) 中的节点上添加了 greenCircle 节点 (zIndex 4),从而使 zIndex 总数为 7。当附加到世界节点的 foreGroundMountainRight 时(我假设默认 zIndex = 0) 在 zIndex = 5.
我在 sprite Kit 中用于建立 zPostiion 的枚举有一些问题。这是枚举:
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 的子节点。我需要这个来实现我之前提到的效果。
问题是虽然foreGroundMountainRight 的zPosition 比greenCircle 的zPosition 大,但最后一个出现在第一个之上。解决问题的唯一方法是更改:
… case Foreground1 = 7
我不明白这是怎么回事。
发生这种情况是因为您在已经处于 zIndex=3 (backGroundMountainOver) 中的节点上添加了 greenCircle 节点 (zIndex 4),从而使 zIndex 总数为 7。当附加到世界节点的 foreGroundMountainRight 时(我假设默认 zIndex = 0) 在 zIndex = 5.