objective-c - 如何锁定和解锁 iOS 应用程序中的特定级别?

标签 objective-c game-development

我正在制作我的第一款游戏,想锁定我的关卡,并在上一关卡达到一定分数时解锁它们。我不确定如何或在哪里实现这一点。这是开始屏幕中的代码。感谢您的帮助,如果需要更多信息,请告诉我!

@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/

相关文章:

c# - Unity 游戏中的物理(钟摆效应)

iphone - iOS - 可点击的不可见段控件

objective-c - 什么是实例变量?

c# - 子弹不会向前移动,而是停留在枪的位置

lua - "local function myFunc()"在lua中如何工作?

c++ - 在游戏中使用状态模式

Java JProgressBar 使用图像

objective-c - NSTextField - 黑色背景上的白色文本,但黑色光标

ios - 如何选择和突出显示像 UITableViewCell 这样的 UICollectionView?

objective-c - 在iphone sdk中将urlString转换为NSURL的问题