我有3 SkSpriteNodes
:man
一个background
和一个groundType
。这些都是png并且彼此坐在上面以创建场景。我使用addChild
添加background
,然后添加groundType
,然后添加man
。这很好用。当用户到达屏幕的末尾时,我将删除除该人之外的所有内容并更改background
和groundType
。类似于陷阱的工作方式。当我删除它们并将它们添加回来时它们会以错误的顺序出现。我致电cleanScreen()
然后loadBackground()
然后loadLevelType()
。您认为会添加背景然后添加级别类型。我所看到的是低于背景的leveltype,因此您无法看到关卡类型。即使我切换功能的顺序,这仍然会发生。我似乎无法在任何地方找到任何能够提供有关精灵排序在删除和重新添加后如何工作的信息。它似乎不一致。我已经彻底阅读了Obj-C的文档,我也尝试使用insertChild:atIndex
,但这对我来说似乎也没有用。
...
cleanScreen()
loadBackground()
loadLevelType()
...
func cleanScreen() {
levelType.removeFromParent()
bg.removeFromParent()
}
func loadBackground() {
var bgNum = currentLevelData["bg"]! as String // resolves to "2"
bg = SKSpriteNode(imageNamed: "bg_\(bgNum)")
bg.name = "bg"
scene.addChild(bg)
}
func loadLevelType() {
var levelTypeInfo = currentLevelData["type"]! as String // resolves to "lake"
levelType = SKSpriteNode(imageNamed: levelTypeInfo)
println(levelTypeInfo)
levelType.name = "level_type"
levelType.position.y = -140
scene.addChild(levelType)
}
当我循环scene.children
时,对象的顺序正确。我之前从未玩过zPosition
。这些名字又回来了:
man
bg
level_type
但它们在屏幕上显示为man
level_type
bg
。我为背景添加了不透明度,我现在确定它们没有以正确的顺序呈现,因为我可以通过背景看到它们。