我正在使用swift / spritekit在Xcode中开发游戏。
我想从GameViewController添加背景,但我有不同的背景场景:GameScene / MenuScene / MapScene。
现在我如何在gameviewcontroller中检测到哪个场景正在运行,以便我可以为其添加正确的背景(作为UIImage)?
如何设置UIImage的Z位置(Z-index)?
答案 0 :(得分:0)
您必须自己跟踪哪个场景。像这样:
class GameViewController {
var mapScene: SKScene?
var menuScene: SKScene?
var gameScene: SKScene?
var currentScene: SKScene?
func addBackground() {
if currentScene === mapScene {
// ...
} else if currentScene === menuScene {
// ...
} else if currentScene === gameScene {
// ...
}
}
}
如果UIImage位于SKNode
内,则可以设置其zPosition
属性。如果它只是普通UIKit元素中的UIImage,那么它基于何时被添加为子视图而隐含。如果您希望它在顶部,请将其从父项中删除并重新添加:
view.removeFromSuperview()
self.parentView.addSubview(view)
答案 1 :(得分:0)
如果只是在场景的实现中添加适当的背景图像,则无需检测正在运行的场景。另外,我建议您避免在视图中添加UIImage
,因为转换到新场景时需要手动删除它。我建议您创建一个以背景图像作为纹理的精灵节点,并将其添加到场景中,其zPosition
为负值。此外,您应该考虑将“背景”精灵的定位点和位置设置为CGPointZero
。
例如,在'didMoveToView'
中 let backgroundNode = SKSpriteNode(imageNamed:"MenuSceneBackground")
backgroundNode.position = CGPointZero
backgroundNode.anchorPoint = CGPointZero
backgroundNode.zPosition = -1000
addChild(backgroundNode)
编辑:添加以下内容以根据需要删除手势识别器
override func willMoveFromView(view: SKView) {
view.removeGestureRecognizer(swipeGesture)
}