0

我有一个简单的游戏,突破克隆。有游戏层,菜单层。我可以在播放过程中调用菜单很好,可以使用下一级按钮(它使新的游戏层具有下一级并过渡到其场景)。但我想要的是在关卡结束时,当我杀死所有块时,我希望弹出该菜单,以便玩家可以点击下一个关卡。但问题是我在游戏层中存储了块数,所以当它们达到零时,我将某些属性变为真。但是当我在关卡结束时尝试从菜单中读取该属性时,我不能,因为我的游戏层在我转换到菜单后已经被释放。

特长; 如何使用按钮更改级别?

4

1 回答 1

2

我认为您的问题是关于游戏架构的。关于如何选择构建游戏有很多权衡。这是我在创建 Cocos2d 游戏时深思熟虑的事情。

Shailesh_ios 的评论将起作用。但是如果你想创建一个更复杂的游戏,你应该考虑以一种巧妙地组织游戏中不同模块和组件的方式来设计游戏,以便它们易于使用和支持。随着您的游戏变得越来越复杂,如果您向 AppDelgate 添加大量功能,它可能会变得非常混乱。为了在更新代码时保持井井有条并保持理智,我建议在您的游戏中创建一个集中的游戏管理器服务。

创建集中式 GameManager 服务 ——对于您的游戏需要的所有集中式服务,对我来说很有效的一件事是创建一个 CCNode 或 NSObject 子类的游戏管理器类。这个类被做成一个单例。然后,我为 GameCenter、OpenFeint、应用内购买、玩家偏好、本地分数和成就、物理世界管理器、游戏音频、游戏状态等创建单独的类。

将类实例作为模块添加到 GameManager ——这些类都归 GameManager 单例类所有,可以为需要它们的游戏组件提供服务。由于这些类通常使用很少的内存,因此无需在每次场景更改时不断地创建和销毁它们,这只会浪费 CPU 周期和电池寿命。

注意事项 ——不过要小心,因为很容易滥用全局单例 GameManager 类,向它添加不属于它的东西。任何可能从各种游戏组件请求的集中式服务都可以考虑添加到 GameManager。通过添加到 GameManager 中,我的意思是在自己的类中编写每个模块,然后让它由 GameManager 创建和拥有。

示例——例如,您的自定义本地分数和成就类可以设置为存储玩家分数,将它们保存到文件或 NSUserDefaults 中,并使该信息可用于任何需要它的游戏组件。

自定义 GameCenter 或 OpenFeint 类将负责对玩家进行身份验证,然后作为服务提供提交分数/成就、下载分数/成就、显示内置 GameCenter/OpenFeint UI 以用于排行榜和成就等。

通过这种方式,您可以专注于设计您的游戏,并在游戏中的任何位置获得游戏所需的基本服务。

于 2012-08-01T22:20:50.903 回答