我正在制作24级游戏,我正在使用NSUserDefaults通过将其值设置为级别数字让我知道自己处于什么级别。
我正在尝试获取NSUserDefault值并将其设置为字符串,这样当我呈现场景时它将知道要去哪个级别。但由于某种原因它不起作用。它说我无法将字符串转换为SKScene。
userdefault保存数字级别(1,2,3等)。有了这个数字,我想去那个名为(Level1,Level2等)的场景。我试图将数字附加到字符串“Level%i”,然后使用该字符串显示场景。但它并没有让我说它不能将String转换为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”并且我有场景
有谁知道我做错了什么?如果这不是正确的方法,那是什么?
提前感谢您!
答案 0 :(得分:1)
你做不到。字符串不能转换为对象。
可能的解决方案是数组:
Observable.fromIterable(selectedJobs)
.observeOn(AndroidSchedulers.mainThread()) // Added this from one answer in SO. but still no resolution.
.all(homeJob -> {
if (!homeJob.isCanCloseJob()) {
selectedJobs.remove(homeJob); // <- this is what causing Exception
//toast message
} else {
//do something
}
return true;
})
.subscribe(new SingleObserver<Boolean>() {
@Override
public void onSubscribe(Disposable disposable) {
}
@Override
public void onSuccess(Boolean aBoolean) {
baseRealm.executeTransaction(realm -> realm.copyToRealmOrUpdate(selectedJobs));
}
@Override
public void onError(Throwable throwable) {
AppLogger.e(tag, throwable.getMessage());
// throws Caused by: java.util.ConcurrentModificationException
}
});
然后您可以按索引检索级别
let levels : [SKScene] = [level1, level2, level3]