好的,我会试着用简短的话来回答这个问题:这取决于你需要什么。
现在我会详细解释一些更长的想法和说明 - 这很长。如果你不打算看完,请确保你读了最后几句话。
首先,我需要澄清一下,你列出的“技术”或API主要与图形有关(除了UIKit还处理输入),只要您理解图形只是整个游戏的一部分(根据我的经验可能还比较“次要”),那就没问题了。
除了图形之外,在制作真正的游戏时还有很多其他要处理的事情。为了不让问题偏离太远,让我丢几个流行词汇: 游戏逻辑、人工智能、资源管理、物理学、交互、网络(可能)、声音等等。我的建议是找一本好书并深入了解[1,2]。
现在我快速浏览了一下,回到你的问题:
基本上,OpenGL和QuarzCore是“在屏幕上绘制东西”的核心技术。所有其他技术都是建立在它们之上的。因此,从理论上讲,如果您想要这样做,您可以仅使用OpenGL或QuarzCore实现与图形输出有关的所有内容(不过您需要注意QuarzCore仅支持2D绘制,而OpenGL同时支持3D和2D,2D实际上只是3D的一种特殊情况)。我认为Quarz实际上也是建立在OpenGL之上的,但我对此不确定。
UIKit是建立在这些技术之上的,使用它基本上有两个作用:a)避免重新发明轮子和b)使用户界面的创建更加容易、快捷和健壮。当然,您可以通过指定四边形的坐标并将其发送到OpenGL进行处理来自行绘制每个按钮。然后你需要检查每一个用户输入是否命中了你的按钮并调用相应的处理程序。但是,仅创建一个UIButton实例(甚至可能在IB中)并指定一个单击处理程序就可以减少很多工作量。
底线:UIKit非常适合创建用户界面。此外,它还可以与OpenGL和QuarzCore一起使用。即使在游戏中我也会在iOS上使用它来创建用户界面。
关于Cocos2D:这是一个建立在OpenGL之上的“游戏引擎”。因此,它包括了许多你在编写自己的基于OpenGL的引擎时必须处理的东西,例如场景管理、精灵、纹理、网格、资源等等。我相信它还有连接到物理和碰撞检测库的功能。然而要理解其中发生的事情需要学习计算机图形和游戏工作[1、2、3]。
底线:你可以使用Cocos2D来制作您的(2D)游戏图形,并使用UIKit来创建用户界面。
然后,CoreAnimation用于动画化CoreGraphics内容。它提供了一个简单的接口,例如平滑地滑动或旋转物体,封装了所有所需的计算(插值、重新绘制等)。它无法与OpenGL配合使用 - 但我认为Cocos2D也会有一个包装器。
底线:用于漂亮的用户界面动画。
说了这么多,只是浅显地介绍了一下,我并不想一开始就吓到你。
对于您特殊的游戏(每个游戏都是特别的),您可能只需使用UIKit和CoreAnimation来处理图形,这可能会成为一款畅销游戏。它们允许使用易于使用的接口进行大量绘制,并且不需要太深的背景知识,对于小型项目而言性能足够。
如果您有一个伟大的游戏想法,请使用最简单的图形解决方案来满足您和您的玩家,并实现它。一旦开始运行,您仍然可以在必要时进行改进。
[1]http://www.mcshaffry.com/GameCode/
[2]http://www.gameenginebook.com/
[3]http://www.opengl.org/documentation/red_book/