我正在制作具有 24 个级别的游戏,并且我使用 NSUserDefaults 通过将其值设置为级别编号来让我知道我处于哪个级别。
我正在尝试获取 NSUserDefault 值并将其设置为字符串,以便当我呈现场景时它会知道要进入哪个级别。但由于某种原因它不起作用。它说我无法将字符串转换为 SKScene。
用户默认保存数字级别(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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句