我正在使用SpriteKit制作游戏。我第一次输掉比赛时,得分为0(好)。然后,我保存当前的分数。下一次我玩,高分是一个很大的数字,例如366508176.为什么会发生这种情况,以及如何解决这个问题呢?
这是ScoreScene.m文件,它的超类是SKScene。 [GameScene getScore]是一个返回最后得分的静态函数。
//
// ScoreScene.m
//
#import "ScoreScene.h"
#import "GameScene.h"
@interface ScoreScene()
@property BOOL contentCreated;
@end
@implementation ScoreScene
-(void)didMoveToView:(SKView *)view
{
if (!self.contentCreated) {
[self createSceneContents];
self.contentCreated=YES;
}
}
-(void)createSceneContents
{
self.backgroundColor=[SKColor purpleColor];
self.scaleMode=SKSceneScaleModeAspectFill;
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
int highScore=(int)[userDefaults objectForKey:@"HighScore"];
//highScore is 0 the first time, 366508176 the second
int currentScore=[GameScene getScore];
//currentScore is 3, for example
if (currentScore>highScore) {
[userDefaults setInteger:currentScore forKey:@"HighScore"];
[userDefaults synchronize];
highScore=currentScore;
}
[self addChild:[self newHighScoreLabel:highScore]];
[self addChild:[self newScoreLabel]];
[self addChild:[self newStartLabel]];
}
...
@end
答案 0 :(得分:0)
而不是:
int highScore=(int)[userDefaults objectForKey:@"HighScore"];
你需要做
int highScore = [userDefaults integerForKey:@"HighScore"];
答案 1 :(得分:0)
集:
[[NSUserDefaults standardUserDefaults] setInteger:highScore forKey:@"HighScore"]
得到:
[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]
答案 2 :(得分:0)
或者,在NSNumbers中“包装”标量是一个更通用的目的,它会给你:
[defaults setObject:[NSNumber numberWithInt:highScore] forKey:@"HighScore"];
和
int HighScore = [[defaults objectForKey:@"HighScore"] intValue];
这样做的好处是,对象现在可以轻松放入集合中,传递给通知等等。