iOS Spritekit 游戏中的肌酐水平
Posted
技术标签:
【中文标题】iOS Spritekit 游戏中的肌酐水平【英文标题】:Creating levels in an iOS Sprite Kit Game 【发布时间】:2014-04-26 14:46:31 【问题描述】:我正在创建一个游戏,我希望它有一个场景可以选择关卡,然后有关卡可以玩。我只是想知道如何去创建关卡并在用户达到该关卡时进行保存。我正在考虑在 ViewController.h 中创建一个 BOOL 并在每个场景中调用它,即 LevelCompleted = YES;然后在玩家尝试玩新关卡或重玩上一个关卡时使用该布尔值
或者,
我是否在每个场景中都有一个 BOOL,然后将每个场景的头文件导入到关卡导航场景中,并使用 BOOL 来显示关卡是否解锁。
另外,要在应用关闭时保存 BOOL 的值,我是否使用 NSUserDefaults?
我已经搜索了很多关于这方面的教程,但似乎找不到任何内容。如果需要更多信息,请告诉我。
【问题讨论】:
您是否完全被这个问题难住了,或者您是否尝试过一些可能的解决方案? 完全难倒@sangony,我尝试过使用它,但似乎没有任何效果,我应该以不同的方式处理它吗? BOOL 是不是用错了? 如果您展示您尝试过的东西并解释为什么它没有按您的预期工作,您可能会得到更好的答案。 这些级别是否按定义的顺序排列,即从 1 到 100?如果是这样,您只需要跟踪当前级别,即 43 并在级别完成时推进该级别。如果没有已解锁的关卡名称数组或字典,则在玩家完成关卡时添加到该数组。 它们将按顺序排列。我是否每个场景只有一个 int levelNumber,然后将所有场景导入到关卡导航场景中?并使用 NSUserDefaults 保存级别号? @LearnCocos2D 【参考方案1】:有几种方法可以做你想做的事。我会给你一些提示和提示,以便你创建适合你游戏的代码。
首先要记住 MyScene 是一个 SKScene,默认情况下从 SpriteKit 项目模板中的 View Controller 调用它。因此,您可以根据需要创建任意数量的 SKScene 类。每个 SKScene 类可以是一个级别。
您可以将您的第一个 SKScene MyScene 转入您的主菜单,并在此处添加级别列表供用户选择。要从主菜单 (MyScene) 进入选定级别,您可以使用以下内容:
SKScene *gameLevel1 = [[Level1 alloc] initWithSize:self.size];
SKTransition *reveal = [SKTransition doorsOpenVerticalWithDuration:1.0];
[self.view presentScene:gameLevel1 transition:reveal];
Level1 将是您的第一个级别的 SKScene 类的名称。还有许多很棒的过渡可供选择。您还可以根据需要包含 scaleMode 属性。
正如 LearnCocos2D 已经指出的那样,您可以使用数组或字典来存储玩家的数据,例如物品、健康状况和达到的等级。除非您需要保存大量数据,否则 NSUserDefaults 是您的最佳选择。这是一个关于如何使用 NSUserDefaults 存储数据的示例:
NSString *valueToSave = @"Level 5";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"levelReached"]
[[NSUserDefaults standardUserDefaults]synchronize];
要读取 NSUserDefaults 中的存储值,您可以这样做:
NSString *highLevel = [[NSUserDefaults standardUserDefaults] stringForKey:@"levelReached"];
您可以随时将新数据写入 NSUserDefaults。因此,如果玩家刚刚完成一个关卡,请将其写入 NSUserDefaults。
【讨论】:
@sangony 你会在场景之间使用 NSNotification 来正确地让关卡场景知道达到了一个新的关卡吗? (只针对我自己的关卡系统) 这真的取决于你如何设置你的游戏逻辑。一旦玩家到达出口或其他表明关卡已完成的目标,我通常会在关卡结束时执行此操作。我想你可以使用 NSNotification 但在我看来这会使你的代码比你真正需要的复杂一点。但同样,这一切都取决于您自己的代码。 是的,不想让它复杂化。谢谢@sangony,我会摆弄。以上是关于iOS Spritekit 游戏中的肌酐水平的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SpriteKit 使球仅垂直弹跳而不是水平弹跳?
Sprite Kit中的UIScrollView水平滚动菜单