Swift3 如何在Xcode sprite工具包中为不同的场景运行不同的代码?
我正在用Xcode 8精灵工具包构建一个游戏,我有不同的关卡,但当我加载下一关卡场景时,第一关卡的代码仍然运行。所有关卡都有自己的swift文件,其名称与各自的场景相同。如何运行适用于不同场景的代码 这是更改级别的功能Swift3 如何在Xcode sprite工具包中为不同的场景运行不同的代码?,swift3,sprite-kit,Swift3,Sprite Kit,我正在用Xcode 8精灵工具包构建一个游戏,我有不同的关卡,但当我加载下一关卡场景时,第一关卡的代码仍然运行。所有关卡都有自己的swift文件,其名称与各自的场景相同。如何运行适用于不同场景的代码 这是更改级别的功能 class func level(_ levelNumber: Int) -> GameScene? { guard let scene = GameScene(fileNamed: "Level_\(levelNumber)") else {
class func level(_ levelNumber: Int) -> GameScene?
{
guard let scene = GameScene(fileNamed: "Level_\(levelNumber)") else
{
return nil
}
scene.scaleMode = .aspectFit
return scene
}
这是我调用以更改级别的代码:
guard let scene = GameScene.level(currentScene) else
{
print("Level \(self.currentLevel+1) is missing?")
return
}
scene.scaleMode = .aspectFit
view.presentScene(scene)
就我个人而言,我处理这件事的方式有点不同 我喜欢在场景编辑器中制作我的关卡文件,这样可以使它们的布局非常快速 我把所有核心游戏引擎的东西都放在我的GameSecene.swift和GameSecene.sks文件中(即gameHUD、玩家、得分、暂停…等等) 然后,我分别创建了Level1.sks、Level2.sks等级别文件。但是这些文件将是类类型的level,这样您就不必重复在每个level.sks文件中所有级别上通用的通用内容 然后我加载游戏场景文件并处理所有级别的通用对象 然后我加载我的水平。重要的是要注意,当这样做时,为关卡和游戏场景创建单独的sks文件时,在加载对象时,必须将对象从关卡文件移动到游戏场景中
func createLevel(levelID: Int) {
if let levelNode = SKReferenceNode(fileNamed: "Level\(levelID)") {
if let background = levelNode.childNode(withName: "backgroundTiles") as? SKTileMapNode {
background.move(toParent: self)
}
if let water = levelNode.childNode(withName: "waterTiles") as? SKTileMapNode {
water.move(toParent: self)
}
if let badGuy = levelNode.childNode(withName: "badGuy") as? SKSpriteNode {
self.badGuy = badGuy
badGuy.move(toParent: self)
}
}
}
向我们展示一些您当前如何加载不同场景的代码将您的代码与适当的代码块一起放入问题中请查看您所有的类类型GameSecene的Level*.sks文件?