Xcode で作成したビデオ ゲーム アプリ、「ゲーム」テンプレート アプリケーションを使用した SpriteKit があります。私のゲームには、スコアを追跡するスコア ラベルがあり、プレーヤーがポイントを獲得すると更新されます。以下は、現在のスコアとハイスコアの 2 つのラベル用に作成したコードです。私のアプリにはもっと多くのコードがありますが、単純化して、この状況に関連するコードを表示したかっただけです。アプリを閉じてアプリを再度開くと、スコアがゼロにリセットされます。でも、アプリを閉じてもハイスコアの数字を保存したいのですが?また、現在のスコアがハイスコアよりも高い場合、それが理にかなっていれば、ハイスコアを新しいスコアに更新したいと考えています。
私は提案を受け入れます。
GameScene.h
#import <SpriteKit/SpriteKit.h>
@interface GameScene : SKScene <SKPhysicsContactDelegate>
{
NSTimer *timerOne;
NSTimer *timerTwo;
NSInteger HighScore;
NSInteger score;
}
@end
GameScene.m
-(void)didMoveToView:(SKView *)view {
//SCORELABEL
SKLabelNode *scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"ChalkboardSE-Bold"];
scoreLabel.position = CGPointMake(CGRectGetMidX(self.frame), self.frame.size.height-50);
scoreLabel.fontSize = 30;
scoreLabel.text = @"0";
scoreLabel.fontColor = [SKColor blueColor];
scoreLabel.name = @"scoreLabel";
[self addChild:scoreLabel];
}
-(void) didBeginContact:(SKPhysicsContact *)contact {
//When redblock comes in contact with redball
if (contact.bodyA.categoryBitMask == CollisionCategoryRedBlock &&
contact.bodyB.categoryBitMask == CollisionCategoryRedBall) {
//Update the score label and add 1 to the current score
[self addPoint:1];
}
//if anything else happens it's gameover
else {
[self performGameOver];
}
}
//Method to add a point to the scorelabel
-(void) addPoint:(NSInteger)points {
score += points;
SKLabelNode *scoreLabel = (SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
scoreLabel.text =[NSString stringWithFormat:@"%ld", (long)score];
}
//Gameover method which will show the high score label
-(void) performGameOver {
//HIGHSCORELABEL
SKLabelNode *highScoreLabel = [SKLabelNode labelNodeWithFontNamed:@"ChalkboardSE-Bold"];
highScoreLabel.position = CGPointMake(CGRectGetMidX(self.frame), 100);
highScoreLabel.fontSize = 20;
highScoreLabel.text = [NSString stringWithFormat:@"High Score: %ld", (long)score];
highScoreLabel.fontColor = [SKColor blueColor];
[self addChild:highScoreLabel];
}