如何使用字符串作为 SKScene 的名称

How can I use a string as a name for the SKScene

我正在制作 24 个级别的游戏,我正在使用 NSUserDefaults 通过将其值设置为级别编号来让我知道我所处的级别。

我正在尝试获取 NSUserDefault 值并将其设置为字符串,以便在我呈现场景时它会知道要转到哪个级别。但由于某种原因,它不起作用。它说我无法将字符串转换为 SKScene。

userdefault 保存数字级别(1、2、3 等)。有了那个数字我想去那个场景,它被命名为(Level1,Level2,等)我试图将数字附加到字符串 "Level%i" 然后使用该字符串呈现场景。但它不让我说不能将字符串转换为 SKScene。

这里是用来呈现关卡场景的代码:

if self.atPoint(location) == NextLevelButton{

        let LevelSelection = UserDefaults.standard.object(forKey: "LevelSelection") //as? String




        let level2 = NSString(format: "Level%@", LevelSelection! as! SKScene) // Here is where I try to make a string and convert it into a SKScene

        removeAllActions()
        removeAllChildren()
        let scene = level2 (size: self.size) // I get an error here   "Cannot call value of non-function type 'NSString'"
        let sKView = self.view! as SKView
        sKView.ignoresSiblingOrder = true
        scene.scaleMode = .aspectFill

        sKView.presentScene(scene)

Level1场景的另一部分代码如下:

let defaultLevel = 1
UserDefaults.standard.set(defaultLevel, forKey: "LevelSelection")

场景的名称是 Level1、Level2 等。我只需要将 NSUserDefualt 变量的编号附加到字符串 "Level" 就得到了场景

有谁知道我做错了什么?如果这不是正确的方法,那是什么?

提前致谢!

你不能那样做。字符串不能转换为对象。

一个可能的解决方案是数组:

let levels : [SKScene] = [level1, level2, level3]

然后你可以通过索引检索级别

let levelSelection = UserDefaults.standard.integer(forKey: "LevelSelection")
let scene = levels[levelSelection - 1]