精灵套件:如何在不同场景之间传递分数?

时间:2014-03-06 12:39:55

标签: objective-c sprite-kit

我试图在两个场景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:我只是学习代码,所以我希望得到详细的回复

4 个答案:

答案 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];
}