在iOS Sprite Kit游戏中创建关卡

use*_*196 6 objective-c ios sprite-kit

我正在创建一个游戏,我希望它有一个可以选择级别的场景,然后有级别可以玩.我只是想知道如何在用户达到该级别时创建关卡并进行保存.我想在ViewController.h中创建一个BOOL并在每个场景中调用它,即LevelCompleted = YES; 然后在玩家尝试播放新关卡或重播之前关卡时使用该布尔值

要么,

我是否在每个场景中都有一个BOOL,然后将每个场景的头文件导入到水平导航场景中,并使用BOOL显示该级别是否已解锁.

另外,要在关闭应用程序时保存BOOL的值,我是否使用NSUserDefaults?

我已经搜索了很多这方面的教程,似乎找不到任何东西.如果需要更多信息,请告诉我.

san*_*ony 2

有几种方法可以做你想做的事。我将为您提供一些技巧和提示,以便您可以创建适合您的游戏的代码。

首先记住,MyScene 是一个 SKScene,默认情况下从 SpriteKit 项目模板中的视图控制器调用。因此,您可以根据需要创建任意数量的 SKScene 类。每个 SKScene 类可以是一个级别。

您可以将您的第一个 SKScene MyScene 放入主菜单中,并添加级别列表供用户在此处选择。要从主菜单 (MyScene) 进入选定的级别,您可以使用如下内容:

SKScene *gameLevel1 = [[Level1 alloc] initWithSize:self.size];
SKTransition *reveal = [SKTransition doorsOpenVerticalWithDuration:1.0];
[self.view presentScene:gameLevel1 transition:reveal];
Run Code Online (Sandbox Code Playgroud)

Level1 将是您的第一个级别的 SKScene 类的名称。还有许多很棒的过渡可供选择。您还可以根据需要包含scaleMode 属性。

正如 LearnCocos2D 已经指出的那样,您可以使用数组或字典来存储玩家的数据,例如物品、生命值和达到的级别。除非您需要保存大量数据,否则 NSUserDefaults 是您的最佳选择。以下是如何使用 NSUserDefaults 存储数据的示例:

NSString *valueToSave = @"Level 5";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"levelReached"]
[[NSUserDefaults standardUserDefaults]synchronize];
Run Code Online (Sandbox Code Playgroud)

要读取 NSUserDefaults 中存储的值,您可以执行以下操作:

NSString *highLevel = [[NSUserDefaults standardUserDefaults] stringForKey:@"levelReached"];
Run Code Online (Sandbox Code Playgroud)

您可以随时将新数据写入 NSUserDefaults。因此,如果玩家刚刚完成一个关卡,请将其写入 NSUserDefaults。