这是此系列教程的第一部分,我将从最基本开始教大家怎样编写一个iPhone游戏。众所周知,OpenGL和Quartz的学习不是那么简单的。本教程将简化开发的过程而不会使用这两种技术。我们将使用UIImageView作为图像部分。
在此教程系列中,我将教大家有关iPhone游戏编程的方方面面。游戏包括图形,音效,游戏逻辑以及简单的电脑AI。
我们将编写的游戏叫iTennis。它实际上是一个以网球为主题的乒乓游戏。它将遵循乒乓游戏的所有规则和逻辑。我选择其作为第一个游戏教程是不需要任何特殊动画效果的。如果大家有兴趣,我将在以后的系列中更加深入,介绍一个更加复杂的游戏。下面是游戏的截图:
下面是项目需要的图像。按图标下载压缩的图像文件。
打开Xcode建立一个View Based应用程序,取名为iTennis。
加压下载的图像文件,将其拖放到项目下的Resources(资源)文件夹。完成后,资源文件夹应该像这样。
现在可以开始编写代码了。为了在代码中与我们的图像互动,我们首先需要建立一个IBOutlet链接。我们还需要加入一些游戏变量以便在可以在教程中使用。打开iTennisVeiwController.h加入以下代码:
如你所见,我们有好些IBOutlet。这是因为我们需要与许多对象互动。暂时先忽略ballVelocity和gameState变量。现在,我们可以开始建立我们的用户界面了。双击iTennisViewController.xib在Interface Builder中打开。下面是一个视频介绍怎样建立界面。
现在你已经做好了链接,关闭Interface Builder返回Xcode。我们需要设定一些常量。你可以硬编码这些数值,但是将它们定为常量是你在调整游戏架构时更易于改变。打开iTennisViewController.m,加入下列代码。
我们来解释下这些常量的意义。前面两个是游戏的状态。我们用它们来确定屏幕上将显示什么。游戏是暂停?是在运行?还是处于标题画面?以后我们会加入更多的状态。下面两个变量是球运行的速度。由于游戏是2D的,只需要X和Y的速度作为它们的速度矢量。再下面一行(注:应该是@synthesize这一行)是用来自动产生getter和setter方法的变量。
现在,我们在viewDidLoad方法中加入下列代码:
首先,我们将游戏状态设定为暂停状态。这样在视图被加载后,游戏不会立即开始。接着,我们建立球速向量。调整前面定义的常量,可以使球运行更快或更慢些。最后,创建一个NSTimer的实例。第一个参数是时阶。在此,我们设置为0.05秒。调整此参数可以改变整个游戏的速度。下面一个参数是目标。此参数告诉定时器回调的位置。再下面的参数就是回调的名称了。简单地说,就是通知定时器每隔0.05秒调用一次self.gameLoop。在这里我们不用管userInfo参数。最后一个参数是告诉定时器重复执行。
初始化后,我们来创建游戏循环。加入下面代码:
首先我们检查游戏是否处于运行状态(暂停状态时,不需要移动球)。如果游戏没有运行,tabToBegin标签将会被显示出来。我们先前定义的这个标签只是通知用户触动屏幕开始。如果游戏真正运行,我们会根据其速度向量来移动球。下面几行是边界检查。如果球到达屏幕边界,我们就会将其速度方向,这样球就会“来回弹跳”。没有这些代码,球就会飞出屏幕了。
最后我们还要加入的代码是touchesBegan方法。此方法是在游戏暂停时用来启动游戏的。加入下面代码:
这段代码首先检查游戏是否处于暂停状态。如果是,则隐藏tapToBegin标签并设定游戏为运行状态。游戏将启动。以后,我们将会在此函数中写入玩家球拍控制。
最后,作为一个好的iPhone开发者,我们需要清除分配的资源。在dealloc方法中加入下面代码。
游戏开发教程系列第一部分到此结束。有什么问题,请留言。