我试图在两个场景MyScene和MyMenu之间传递得分。 分数变化的游戏部分被声明为_score(NSInteger),其标签是_scoreLabelNode(SKLabelNode)我用于初始化标签的代码,并创建在MyScene中保存分数的标签
_score = 0;
_scoreLabelNode = SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Wide;
_scoreLabelNode.position =CGPointMake (CGRectGetMidX(self.frame), 3 *self.frame.size.height /4);
_scoreLabelNode.zPosition = 100;
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
_scoreLabelNode.fontColor =[UIColor blackColor];
[self addChild:_scoreLabelNode]
所以我想我的问题是,当分数需要在MyScene中更改时,如何在两个场景之间传输分数,并且需要显示用户在MyMenu中获得的分数。提前谢谢。
PS:我只是学习代码,所以我希望得到详细的回复
答案 0 :(得分:1)
在MyScene中使用NSUserDefaults:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:_score forKey:@"score"];
在MyMenu:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int score = [prefs integerForKey:@"score"];
SKLabelNode *scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Wide"];
//Other label node configuration here
scoreLabel.text = [NSString stringWithFormat:@"%d",score]
//Other configuration here
这可能不太对,把它写在我的头顶。 Xcode将帮助您修复任何警告/错误。
答案 1 :(得分:0)
您还可以使用MyMenu场景的userData
属性。
- (void) goToMenuScene
{
SKView *spriteView = (SKView *) self.view;
SKScene *newScene = [[MyMenu alloc]initWithSize:self.size];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init]
[dic setInteger:_score forKey:@"score"];
newScene.userData = dic;
[spriteView presentScene:newScene];
}
在您想要呈现场景时,请致电
[self goToMenuScene];
在MyMenu场景中,
int score = [[self.userData objectForKey:@"score"]intValue];
答案 2 :(得分:0)
我会在启动时在应用代表中设置我的分数,例如
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//SETUP SCORE
[[NSUserDefaults standardUserDefaults] synchronize];
NSInteger *score = [[NSUserDefaults standardUserDefaults] integerForKey:@"hasAnsweredQuestion"];
if (!score) {
//SET SCORE AS nathreed SUGGESTS
}
但同样,您可以在menuViewController中每次检查是否有分数
祝你好运!答案 3 :(得分:0)
我喜欢akashg的答案,但这是另一种方法,它更简单。
您可以声明得分属性MyMenu.h文件。
@property (nonatomic, assign) int score;
然后,在MyScene.m文件中......
- (void) goToMyMenuScene
{
SKScene *myMenuScene = [[MyMenu alloc]initWithSize:self.size];
myMenuScene.score = _score;
[self.view presentScene:myMenuScene];
}