2017-07-28 39 views
4

我在Xcode 8精灵套件建立一个游戏,我有不同的层次,但是当我加载一个新的水平的场景,为第一级的代码仍然运行。所有级别都有自己的swift文件,其名称与其各自的场景相同。我如何运行适用于不同场景的代码?如何在Xcode sprite-kit中为不同的场景运行不同的代码?

这是改变水平

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) 
+0

我们展示你是如何加载不同场景的一些代码,目前 –

+0

把你的代码在你的问题与正确的代码块,请 –

+0

都是你的等级* .sks类类型GameScene的文件? –

回答

2

就个人而言,我这个不同的方式处理一点点。

我喜欢做的场景编辑器我的级别的文件,这让他们奠定了非常快的。

我把所有的核心游戏引擎的东西在我的GameScene.swift和GameScene.sks文件(即gameHUD,球员,得分,暂停......等等等等等等)

我再单独创建我的级别文件作为Level1.sks,Level2.sks等,但这些都将是类类型的水平,而这样一来,你就不必不停地重复仿制的东西,是在每个Level.sks文件各级普遍。

我然后加载GameScene文件并处理通用于所有级别的任何对象。

然后我打开了我的水平。需要注意的是,当这样做并且为Levels和GameScene使用单独的sks文件时,您必须在加载它们时将对象从Level文件移动到GameScene。

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) 
     } 
    } 
} 
相关问题