我刚开始学习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”