我有一个简单的游戏,突破克隆。 有游戏层,菜单层。我可以在播放期间调用菜单就好了,可以使用下一级按钮(它会创建下一级别的新游戏层并转换到它的场景)。但我想要的是在关卡结束时,当我杀死所有块时,我希望弹出菜单,以便玩家可以点击下一级。但问题是我在游戏玩法层中存储了块号,因此当它们达到零时,我将某些属性变为true。但是当我尝试在关卡结束时从菜单中读取该属性时,我不能,因为我的游戏玩法层已经解除分配,因为我已转换到菜单。
Tldr;如何用按钮改变等级?
答案 0 :(得分:2)
我认为你的问题是游戏架构。关于如何选择构建游戏,有很多权衡取舍。这是我在创建Cocos2d游戏时想到的很多东西。
Shailesh_ios的评论将有效。但是如果你想创建一个更复杂的游戏,你应该考虑设计游戏,整齐地组织游戏中的不同模块和组件,以便它们易于使用和支持。随着游戏变得越来越复杂,如果向AppDelgate添加大量功能,它可能会变得非常混乱。为了保持井井有条并在更新代码时保持理智,我建议您在游戏中创建一个集中的游戏管理器服务。
创建集中式GameManager服务 - 对于你的游戏需要的所有集中服务,一件对我有用的事情是创建一个CCNode或NSObject子类的游戏管理器类。这个班级被制成一个单身人士。然后我为GameCenter,OpenFeint,应用程序内购买,玩家偏好,本地分数和成就,物理世界经理,游戏音频,游戏状态等创建单独的类。
将类实例作为模块添加到GameManager - 这些类都归GameManager单例类所有,可以为需要它们的游戏组件提供服务。由于这些类通常使用非常少的内存,因此无需在每次场景更改时不断创建和销毁它们,这只会浪费CPU周期和电池寿命。
注意事项 - 但要小心,因为通过向其添加不属于它的东西很容易滥用全局单例GameManager类。可以认为可以从各种游戏组件请求的任何集中服务被添加到GameManager。通过添加到GameManager,我的意思是将每个模块编码在自己的类中,然后由GameManager创建并拥有它。
<强>实施例强> - 例如,您可以设置自定义本地分数和成就类来存储玩家分数,将其保存到文件或NSUserDefaults,并将该信息提供给任何需要它的游戏组件。
自定义GameCenter或OpenFeint类将负责对播放器进行身份验证,然后作为服务提供提交分数/成就,下载分数/成就,呈现内置GameCenter / OpenFeint UI以获取排行榜和成就等。
通过这种方式,您可以专注于设计游戏,并在游戏中的任何位置提供游戏所需的基本服务。