【问题标题】:Sprite-kit How to pass integer value to next sceneSprite-kit 如何将整数值传递给下一个场景
【发布时间】:2014-11-01 10:52:06
【问题描述】:

我有两个场景GameSceneGameLostScene,在GameLostScene 我创建了highScore,但我不知道如何从GameScene 获得当前分数。然后我尝试用NSLog打印分数,我可以看到哪个值不正确,我应该怎么做才能使它正确?

GameScene方法

 -(void) gameLost {

    SKScene *nextScene = [[GameLostScene alloc] initWithSize:self.size ];
    SKTransition *doors = [ SKTransition fadeWithDuration:1.0];
    NSLog(@"%ld", self.currentScore);
    [self.view presentScene:nextScene transition:doors];
}

游戏迷失场景

GameScene *gameScene;
long score = gameScene.currentScore;
NSLog(@"%ld", score);

【问题讨论】:

    标签: ios objective-c sprite-kit skscene


    【解决方案1】:

    如果您没有发现自己的分数数据重要或敏感,请使用NSUserDefaults

    第一个场景:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:yourScore forKey:@"HighScore"];
    

    第二幕:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    yourScore = [defaults integerForKey:@"HighScore"]
    

    这也将存储您的分数。

    或者您可以只通过场景传递数据。

    在第一场景 在您的 .m 文件中声明:

    static NSInteger staticScore;
    

    创建类方法并返回这个值:

    + (NSInteger) passScore {
       return staticScore;
    }
    

    在另一个场景#import这个类并得到这样的值:

    [FirstScene passScore];
    

    【讨论】:

    • 我的高分已经正常工作了,在你输之前我需要知道分数是多少:)
    • 我回答的第二部分是关于如何将分数传递到第二个屏幕。
    • 我不明白,我想将我的分数传递给下一个场景,我应该如何声明它以及在我的 GameScene 中的什么位置,以及我应该如何在我的 GameLostScene 中访问它?
    • 正如我所说,使用分数的返回值创建一个类方法并在任何你想要的地方访问它。
    • 很抱歉之前做了你说的几乎所有事情:)
    【解决方案2】:

    在您的 GameLostScene.h 中

    @interface GameOverScene : SKScene
    @property NSInteger *score;
    @end
    

    在您的 GameScene.m 中

    #import gameLostScene.h
    @interface gameScene ()<SKPhysicsContactDelegate>//If you using physics.
    @property NSInteger score;
    @end
    
    -(void) gameLost {
        gameLostScene.score = self.score;
        SKScene *nextScene = [[GameLostScene alloc] initWithSize:self.size ];
        SKTransition *doors = [ SKTransition fadeWithDuration:1.0];
        [self.view presentScene:nextScene transition:doors];
    }
    

    【讨论】:

    • GameLostScene.score = self.score;我无法访问 GameLostScene 中的 score 属性。 “在‘​​GameLostScene’类型的对象上找不到属性‘score’
    • 你忘记了gameScene.m中的#import gameLostScene.h吗?
    • 我认为他设置的不是属性分数而是ivar,所以他现在没有setter。但是他已经用我在上面发布的类方法解决了这个问题,所以无论如何这对他来说并不实际。
    • 那么您可能应该编辑您的答案,因为它的 Valar 不完整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多