我正在制作我的第一款游戏,想锁定我的关卡,并在上一关卡达到一定分数时解锁它们。我不确定如何或在哪里实现这一点。这是开始屏幕中的代码。感谢您的帮助,如果需要更多信息,请告诉我!
@implementation StartScreen{
SKSpriteNode *level2;
SKSpriteNode *level3;
SKSpriteNode *level4;
SKSpriteNode *level5;
SKSpriteNode *level6;
SKSpriteNode *level7;
SKSpriteNode *level8;
SKSpriteNode *level9;
SKAction *clicSound;
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"Background"];
[background setSize:self.size];
[background setPosition:CGPointMake(self.size.width/2, self.size.height/2)];
[self addChild:background];
SKSpriteNode *logo = [SKSpriteNode spriteNodeWithImageNamed:@"logo"];
[logo setSize:CGSizeMake(logo.size.width, logo.size.height)];
[logo setPosition:CGPointMake(self.size.width/2, self.size.height/2 + 150)];
[self addChild:logo];
SKSpriteNode *highscorebutton = [SKSpriteNode spriteNodeWithImageNamed:@"highscorebutton"];
highscorebutton.name = @"highscorebutton";
[highscorebutton setPosition:CGPointMake(self.size.width/2, self.size.height/2 - 100)];
[self addChild:highscorebutton];
level2 = [SKSpriteNode spriteNodeWithImageNamed:@"level2"];
level2.name = @"level2";
[level2 setPosition:CGPointMake(50, self.size.height/2 +10 + 25)];
[self addChild:level2];
level3 = [SKSpriteNode spriteNodeWithImageNamed:@"level3"];
level3.name = @"level3";
[level3 setPosition:CGPointMake(120, self.size.height/2 +10 +25)];
[self addChild:level3];
level4 = [SKSpriteNode spriteNodeWithImageNamed:@"level4"];
level4.name = @"level4";
[level4 setPosition:CGPointMake(190, self.size.height/2 +10 +25)];
[self addChild:level4];
level5 = [SKSpriteNode spriteNodeWithImageNamed:@"level5"];
level5.name = @"level5";
[level5 setPosition:CGPointMake(260, self.size.height/2 +10 +25)];
[self addChild:level5];
level6 = [SKSpriteNode spriteNodeWithImageNamed:@"level6"];
level6.name = @"level6";
[level6 setPosition:CGPointMake(50, self.size.height/2 -10 -25)];
[self addChild:level6];
level7 = [SKSpriteNode spriteNodeWithImageNamed:@"level7"];
level7.name = @"level7";
[level7 setPosition:CGPointMake(120, self.size.height/2 -10 -25)];
[self addChild:level7];
level8 = [SKSpriteNode spriteNodeWithImageNamed:@"level8"];
level8.name = @"level8";
[level8 setPosition:CGPointMake(190, self.size.height/2 -10 -25)];
[self addChild:level8];
level9 = [SKSpriteNode spriteNodeWithImageNamed:@"level9"];
level9.name = @"level9";
[level9 setPosition:CGPointMake(260, self.size.height/2 -10 -25)];
[self addChild:level9];
[[GameCenterManager sharedManager] setDelegate:self];
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
if([node.name isEqualToString:@"highscorebutton"]){
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
BOOL isAvailable = [[GameCenterManager sharedManager] checkGameCenterAvailability];
if(isAvailable){
UIViewController *vc = self.view.window.rootViewController;
[[GameCenterManager sharedManager] presentLeaderboardsOnViewController:vc];
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"High Score" message: @"Game Center is currently unavailable. Make sure you are logged in." delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show];
}
}
if ([node.name isEqualToString:@"level2"]){
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level2 runAction:action completion:^(void){
[self selectLevel:2];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level3"]){
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level3 runAction:action completion:^(void){
[self selectLevel:3];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level4"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level4 runAction:action completion:^(void){
[self selectLevel:4];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level5"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level5 runAction:action completion:^(void){
[self selectLevel:5];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level6"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level6 runAction:action completion:^(void){
[self selectLevel:6];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level7"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level7 runAction:action completion:^(void){
[self selectLevel:7];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level8"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level8 runAction:action completion:^(void){
[self selectLevel:8];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
if ([node.name isEqualToString:@"level9"]) {
clicSound = [SKAction playSoundFileNamed:@"click.wav" waitForCompletion:YES];
[self runAction:clicSound];
SKAction *action = [SKAction rotateByAngle:M_PI duration:.8];
[level9 runAction:action completion:^(void){
[self selectLevel:9];
SKTransition *transition = [SKTransition fadeWithDuration:.6f];
GameScreen *game = [[GameScreen alloc] initWithSize:self.size];
[self.scene.view presentScene:game transition:transition];
}];
}
}
-(void)selectLevel:(int)level{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:level forKey:@"level"];
[userDefaults synchronize];
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
}
- (void)gameCenterManager:(GameCenterManager *)manager authenticateUser:(UIViewController *)gameCenterLoginController
{
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController:gameCenterLoginController animated:YES completion:^{
}];
}
最佳答案
您应该使用NSUserDefaults
,并在游戏打开时检查您是否已完成所需的级别。一旦您通过了所需的级别/达到了所需的分数,请将其保存到 NSUserDefaults
中,然后您的应用程序将记住锁定和解锁的内容。
关于objective-c - 如何锁定和解锁 iOS 应用程序中的特定级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986244/