我刚开始学习Swift作为我的第一门编码语言。我当前的挑战是尝试自动完成从当前级别设置为LevelOne.sks到在Xcode级别编辑器中创建的另一个级别LevelTwo.sks的转换。我正在尝试用以下代码集触发到下一个级别的转换。

在我的基本场景中,我具有此功能可将玩家发送到下一个级别

private func goToNextLevel(nextLevel: String) {

    //When hard coding the arguments as...
    //loadScene(withIdentifier: .levelTwo)
    //The level two scene loads and is playable...however,
    //When trying to change the level argument in code
   // by passing a nextLevel variable
   // the optional unwraps nil and crashes the app.

    loadScene(withIdentifier: SceneIdentifier(rawValue: nextLevel)!)

}


然后将其传递到SceneLoadManager文件

  enum SceneIdentifier: String {
    case levelOne = "LevelOne"
    case levelTwo = "LevelTwo"
//    case levelThree = "LevelThree"
}

private let sceneSize = CGSize(width: 768, height: 1024)

protocol SceneManager { }
extension SceneManager where Self: SKScene {

    func loadScene(withIdentifier identifier: SceneIdentifier) {


        let reveal = SKTransition.flipHorizontal(withDuration: 0.5)
        let nextLevel = SKScene(fileNamed: identifier.rawValue)
        nextLevel?.scaleMode = .aspectFill
        self.view?.presentScene(nextLevel!, transition: reveal)
    }


我认为这与我试图设置nextLevel有关。目前,我将其设置如下

let nxtLvl = String?
nxtLvl = ".levelOne"
goToNextLevel(nextLevel: nxtLvl)


希望您能理解我正在努力实现的目标,并且至少在这里我正处于正确的轨道上。任何帮助将不胜感激。谢谢!

最佳答案

什么真正可以帮助您解决:

SceneIdentifier.levelOne.rawValue返回此->“ LevelOne”



SceneIdentifier(rawValue:“ LevelOne”)返回-> SceneIdentifier.levelOne

看到不同 ?
在第一个字符串中,您需要
在第二个中,您将获得“左成员”(我不知道Therm)

一个示例,可以更清楚地了解是否有枚举:

enum SceneIdentifier: String {
    case case1 = "LevelOne"
    case case2 = "LevelTwo"

}


SceneIdentifier(rawValue : "LevelOne") !

返回此:SceneIdentifier.case1

SceneIdentifier.case1.rawValue
返回此:“ levelOne”

10-08 05:50