我最近同时学习了 Objective-C 和 cocos2d。一开始我做了很多关于objective-c的阅读,给我一个入门知识。除了语法,大部分知识在我的游戏中都没有用到。在开始学习 cocos2d 教程之前,学习 Objective-c 最重要的事情是内存管理和调试。
引用计数内存管理可能需要一分钟来适应,具体取决于您来自什么语言。一般规则是,如果你分配/复制(没有自动释放)或保留它,你必须在某个时候释放它,如果你需要使用超出当前范围的东西,你应该保留它。您可以从一些覆盖对象 dealloc 方法的 cocos2d 示例中看到,以便释放您创建/保留的任何内容。
调试也花了我一分钟时间来适应。如果您添加一个可用于记录未捕获异常的高级 try/catch 块,它会有所帮助,否则您的一些错误将给您提供很少的信息。您可能还想研究/弄乱您的一些项目设置,以便更好地捕捉错误,例如启用僵尸。Objective-c 崩溃的一个重要原因是向已经释放的对象发送消息。一旦遇到无法弄清楚的 badaccess 错误,您基本上将被迫深入研究这些东西以找出原因。
其他一些会派上用场的纯客观 c 知识非常熟悉 NSArray 和 NSDictionary 对象如何工作,它们如何自动保留/释放,以及它们如何只能保存对象(没有原始值)。要使用浮点数/整数和数组/字典,您需要将原语转换为类似 NSNumber 对象的东西,只需稍加研究即可轻松完成。另一个有用的方法是知道如何保存/加载 plist。在 NSArray 和 NSDictionary 对象上执行此操作有一些方便的方法。这与 NSFileManager 的一些知识一起应该足以帮助您保存/加载游戏状态。如果你想在你的编码中变得非常花哨/干净,你还将了解 Objective-c 中的观察者。KVO 非常适合在某些对象属性更改时自动更新 UI。例如,我的 HUD KVOs 玩家对象的生命,因此当生命值改变时,HUD 会自动更新。这可以让你制作一个更干净的 MVC 类型的应用程序。您还可以注册以收听其他类型的消息(不仅仅是属性更改),只需确保在完成收听后取消注册您的侦听器。
我的最后一点建议是始终注意 XCode 警告。如果你得到一个,你不知道为什么,你应该弄清楚为什么。您可能可以忽略一些简单的错误,其他可能会导致您无法以任何其他方式追踪的错误。例如,我曾经在我的代码中使用了函数 max(),xcode 给了我一个我不理解的奇怪警告。这通过破坏堆栈对我的程序造成了严重破坏。当我将 max() 更改为 MAX() 时,三四个无法解释的错误立即消失了。这种事情可能会让你倒退数周,如果你没有立即抓住它,就要认真梳理你的每一段代码。
其余的大部分可以通过查看 cocos2d 代码/示例来学习。祝你好运。