《Swift游戏开发实战教程试读第三章.pdf》由会员分享,可在线阅读,更多相关《Swift游戏开发实战教程试读第三章.pdf(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Swift 游戏开发实战教程大学霸 大学霸 Swift 游戏开发实战教程(内部资料)大学霸 Swift 游戏开发实战教程大学霸 大学霸 前 言 2014 年 9 月,苹果公司推出新一代开发语言 Swift。该语言开发效率更高,受到苹果开发者的广泛欢迎。国内开发领域中,大量的开发人员从 Objective-C 转向 Swift 语言。本教程是国内第一本 Swift 游戏开发专向资料。本教程详细讲解记忆配对、太空侵略者、Simon 记忆、迷你高尔夫、银河大战五个游戏的开发。在项目讲解同时,还着详细介绍了图形绘制、游戏引擎、音频引擎、用户交互、传感器等专向技术。最后,教程讲解苹果专用游戏框架 Spr
2、it Kit 的使用。为了帮助读者充分了解实际开发,教程还详细讲解游戏开发的必备知识,如帐号绑定、发布游戏等内容。1.学习所需的系统和软件学习所需的系统和软件 安装 Mac OS X 10.9.4 操作系统 安装 Xcode 6.0.1 2.学习建议学习建议 大家学习之前,可以致信到 xxxxxxxxxxxxx,获取相关的资料和软件。如果大家在学习过程遇到问题,也可以将问题发送到该邮箱。我们尽可能给大家解决。Swift 游戏开发实战教程大学霸 大学霸 目 录 第 1 章 开发环境搭配Xcode 的安装与运行.1 1.1 苹果账号.1 1.1.1 苹果账号的成员分类.1 1.1.2 注册免费的苹
3、果账号.1 1.1.3 注册非免费的苹果账号.4 1.2 Xcode 的下载和安装.6 1.2.1 App Store 中下载和安装 Xcode.6 1.2.2 其他网站下载和安装 Xcode.9 1.3 绑定苹果账号.10 1.4 更新组件和文档.11 1.5 首次打开 Xcode.12 1.6 Xcode 的界面介绍.15 1.6.1 导航窗口.15 1.6.2 工具窗口.16 1.6.3 编辑窗口.17 1.6.4 目标窗口.18 第 2 章 编写第一个 Swift 程序.19 2.1 运行程序.19 2.2 模拟器的操作.20 2.2.1 模拟器与真机的区别.21 2.2.2 退出应用
4、程序.21 2.2.3 应用程序图标的设置.22 2.2.4 语言设置.24 2.2.5 旋转.26 2.2.6 删除应用程序.27 2.3 编辑界面.28 2.3.1 界面介绍.28 2.3.2 设计界面.30 2.3.3 视图对象库的介绍.33 2.4 编写代码.34 2.5 调试.37 2.6 真机测试.39 2.6.1 申请和下载证书.40 2.6.2 实现真机测试.49 2.7 使用帮助文档.49 第 3 章 iPhone 游戏开发基础记忆配对游戏.51 3.1 游戏介绍.51 3.2 开发游戏之前的准备工作.52 Swift 游戏开发实战教程大学霸 大学霸 3.2.1 创建项目.5
5、2 3.2.2 添加图像.53 3.3 主菜单模块.54 3.4 配对模块.57 3.4.1 设计界面.57 3.4.2 卡牌的翻转.61 3.5 核心功能卡牌的配对.68 3.5.1 翻转两个卡牌.68 3.5.2 判断卡牌.69 3.5.3 配对成功失败的操作.69 3.5.4 完成所有配对.71 3.6 配对模块的额外功能.73 3.6.1 猜测次数功能.73 3.6.2 提高游戏的难度.74 3.7 分数榜单模块.75 3.7.1 准备工作.75 3.7.2 界面设计.76 3.7.3 实现分数的显示.78 3.8 关于游戏模块.81 3.9 场景切换.82 3.9.1 什么是场景切换
6、.83 3.9.2 实现场景切换.84 3.9.3 过渡动画效果.86 3.9.4 全部的场景切换.87 第 4 章 太空侵略者绘制图像.91 4.1 游戏介绍.91 4.2 开发游戏之前的准备工作.92 4.3 主菜单模板.92 4.4 射击游戏模板.93 4.4.1 准备工作.94 4.4.2 设计界面.94 4.5 添加飞船.95 4.6 移动飞船.96 4.6.1 向左移动.97 4.6.2 向右移动.97 4.7 创建敌人.99 4.7.1 创建单个敌人的创建.99 4.7.2 创建多个敌人.100 4.8 移动敌人.101 4.9 发射子弹.103 4.9.1 飞船的子弹.103
7、4.9.2 敌人的子弹.105 4.10 场景的切换.107 第 5 章 太空侵略者 2游戏引擎.110 Swift 游戏开发实战教程大学霸 大学霸 5.1 游戏介绍.110 5.2 开发游戏前的准备工作.111 5.3 主菜单模块.112 5.4 射击游戏模块.113 5.5 了解状态机.114 5.6 使用代码添加射击游戏界面元素.115 5.6.1 提示界面.115 5.6.2 飞船.117 5.6.3 敌人.122 5.7 检测碰撞.127 5.7.1 敌人的子弹击中飞船的检测.127 5.7.2 飞船的子弹击中敌人的检测.128 5.8 计分功能.130 5.9 歼灭所有敌人.130
8、 5.10 分数榜模块.132 5.10.1 准备工作.132 5.10.2 界面设计.132 5.10.3 实现分数的显示.134 5.11 场景切换.138 第 6 章 Simon 记忆游戏音频引擎.142 6.1 游戏介绍.142 6.2 开发游戏之前的准备工作.143 6.3 主菜单模块.146 6.4 游戏模块.147 6.4.1 准备工作.148 6.4.2 界面设计.148 6.5 添加颜色提示序列.149 6.5.1 添加提示声音.150 6.5.2 添加颜色提示.152 6.6 玩家猜测.153 6.7 添加背景音乐.155 6.8 游戏模块的额外功能.156 6.8.1 显
9、示游戏处于关数.156 6.8.2 提高游戏的难度.157 6.9 游戏介绍模块.159 6.10 场景切换.160 第 7 章 迷你高尔夫用户交互.162 7.1 游戏介绍.162 7.2 开发游戏之前的准备工作.163 7.3 主菜单模块.163 7.4 游戏模块.164 7.4.1 准备工作.165 7.4.2 界面设计.165 7.4.3 添加高尔夫球.166 Swift 游戏开发实战教程大学霸 大学霸 7.4.4 移动高尔夫球.167 7.5 用户交互中的不足.169 7.5.1 边界的限定.169 7.5.2 速度限定.170 7.5.3 进洞的限定.171 7.6 杆数显示.17
10、4 7.7 游戏界面模块.175 7.8 场景切换.176 第 8 章 银河大战Sprite Kit 游戏引擎和传感器应用.181 8.1 游戏介绍.181 8.2 创建 Game 类型项目.182 8.2.1 Game 模板类型简介.182 8.2.2 创建项目.183 8.2.3 添加图像和音频文件.185 8.3 主菜单模块.185 8.4 射击游戏模块.187 8.5 为射击游戏界面添加元素.187 8.5.1 准备工作.187 8.5.2 什么是 Sprite Kit.188 8.5.3 使用 SKSpriteNode 添加背景.188 8.5.4 使用 SKSpriteNode 添
11、加飞船.190 8.5.5 使用 SKSpriteNode 添加敌人.191 8.6 发射子弹.192 8.6.1 添加子弹.192 8.6.2 通过触摸发射子弹.192 8.7 使用传感器操控飞船.194 8.7.1 传感器介绍.194 8.7.2 判断传感器是否可用.194 8.7.3 实现移动.195 8.8 碰撞检测.197 8.9 分数显示.198 8.9.1 使用 SKLabelNode 添加显示分数的节点.199 8.9.2 实现分数的显示.199 8.10 添加声音.200 8.10.1 进入射击游戏界面的声音.200 8.10.2 子弹击中敌人的声音.201 8.11 游戏介
12、绍模块.201 8.12 场景切换.202 第 9 章 应用程序的发布.205 9.1 创建 App ID.205 9.2 申请发布证书.206 9.2.1 申请证书.206 9.2.1 申请证书对应的配置文件(Provision File).209 9.3 准备提交提交应用程序.211 Swift 游戏开发实战教程大学霸 大学霸 9.3.1 创建应用及基本信息.211 9.3.2 项目的相关设置.214 9.4 提交应用程序到 App Store 上.219 9.5 常见审核不通过的原因.226 Swift 游戏开发实战教程大学霸 大学霸 第 3 章 iPhone 游戏开发基础记忆配对游戏
13、前面章节已经讲解了 Swift 的基础语法,从本章开始将以实战的形式,讲解游戏如何开发。记忆配对游戏是一类经典的益智游戏。它不仅可以锻炼玩家的眼力,还可以锻炼玩家的记忆力。本章将通过这个游戏讲解游戏主菜单、游戏配对、场景切换等技术。3.1 游戏介绍 记忆配对游戏是经典的益智游戏,老少皆宜。游戏开始时,提供许多反扣的卡牌。玩家可以连续将卡牌翻转过来。当连续的两张牌一样时,就自动消除;否则,这两张牌会被重新反扣回去。这样的一个游戏,通常包括以下几个模块。1.主菜单模块主菜单模块 主菜单提供一个基本的界面,帮助玩家操作,如图 3.1 所示。轻拍 Play Game 按钮,可以进入配对游戏的界面;轻拍
14、 List Scene 按钮,可以进入分数榜单的界面;轻拍 About Scene按钮,可以进入关于游戏的界面。2.配对模块配对模块 配对模块是程序的最重要的模块。它提供了游戏的界面,如图 3.2 所示。同时,它会负责对玩家的操作做出响应。图 3.1 主菜单 图 3.2 配对游戏界面 3.分数榜单模块分数榜单模块 分数榜单模块提供了玩家分数的界面,如图 3.3 所示 4.关于游戏的模块关于游戏的模块 Swift 游戏开发实战教程大学霸 大学霸 关于游戏的模块提供了此游戏的玩法,说明等内容,如图 3.4 所示。图 3.3 分数榜单 图 3.4 关于游戏 3.2 开发游戏之前的准备工作 本节将讲解
15、一些在开发游戏之前的准备工作。3.2.1 创建项目 和其他的 iOS 应用程序一样,在开发一款游戏之前,首先需要创建一个项目。在此项目中保存了开发游戏的代码,资源等内容。在本章中,需要创建一个 Single View Application模板类型的项目,命名为 MatchingGame。它的具体步骤如下:(1)单击 Dock 中的 Xcode,弹出 Welcome to Xcode 对话框。(2)选择其中的 Create a new Xcode project,弹出 Choose a template for your new project:对话框,如图 3.5 所示。Swift 游戏开发
16、实战教程大学霸 大学霸 图 3.5 操作步骤(3)选择 iOS|Application 中的 Single View Controller 模板,单击 Next 按钮后,弹出Choose options for your new project:对话框,如图 3.6 所示。图 3.6 操作步骤(4)在此对话框中输入项目的名称 MatchingGame,将程序语言选择为 Swift。单击 Next按钮,弹出选择项目保存位置的对话框。单击 Create 按钮后,一个名为 MatchingGame 的项目就创建好了。我们就可以在此项目中开发记忆配对游戏。3.2.2 添加图像 为了让记忆配对游戏的界面
17、看起来更加的漂亮,需要在创建的项目即 MatchingGame 中添加一些图像。这些图像有back.png、blank.png、backdrop1.jpg、backdrop2.jpg、backdrop3.jpg、icons01.png icons15.png。添加图像的具体操作步骤如下:(1)右击 Supporting Files 文件夹,弹出快捷菜单,如图 3.7 所示。Swift 游戏开发实战教程大学霸 大学霸 图 3.7 操作步骤(2)选择 Add Files to MatchingGame命令,弹出选择文件对话框,如图 3.8 所示。图 3.8 操作步骤(3)选择需要添加的图像后,单击
18、 Add 按钮,实现图像的添加。添加后的图像就会显示在 Supporting Files 文件夹中。3.3 主菜单模块 主菜单提供一个基本的界面。在一个主菜单中常用会拥有一组菜单项,它可以帮助玩家进行操作。菜单项的实现方式有很多,如使用标签实现菜单项,使用按钮实现菜单项等等。本节将使用按钮实现对主菜单中菜单项的设计。双击将 Main.storyboard 文件打开,对主菜单的界面(界面也可以称之为主视图或者场景)进行设计,具体的操作步骤图像如下:(1)选择 Show the File inspector 选项,将 Interface Builder Document 中的 Opens in 改
19、Swift 游戏开发实战教程大学霸 大学霸 为 Xcode 5.1,如图 3.9 所示。设置界面的大小设置界面的大小Show the File inspectorShow the File inspector文件查看器文件查看器 图 3.9 设置界面的大小 注意:由于 Xcode 6.0 的界面比较大,为了方便截图的方便,将 Xcode 6.0 界面改为Xcode 5.1 的界面。Opens in 这一项开发者可以不去修改,在本书中,由于截图的缘故,所以将此项进行了修改(在后面的章节中实现的应用都将此项进行了修改),修改此项后,画板中的界面的尺寸会变为 Xcode 5.1 中的尺寸,如图 3.
20、10 所示。设置前设置前设置后设置后 图 3.10 界面的大小设置(2)对在画板中原本存在的 View Controller 视图控制器的界面进行设计,效果如图 3.11所示。Swift 游戏开发实战教程大学霸 大学霸 LabelLabelImage ViewImage ViewButtonButton1 1ButtonButton2 2ButtonButton3 3ViewView1 1ViewView2 2ViewView3 3 图 3.11 界面的效果 需要添加的视图对象以及对它们的设置如表 3-1 所示。表 3-1 设置界面 视图 设置 Image View Image:backdro
21、p2.jpg 位置和大小:(0,0,320,568)Label Text:Matching Game Font:System Bold 32.0 Alignment:居中 位置和大小:(35,52,250,42)View1 Alpha:0.5 Background:黑色 位置和大小:(57,211,206,37)Button1 Title:Play Game Font:System Bold 19.0 Text Color:白色 位置和大小:(40,4,127,30)View2 Alpha:0.5 Background:黑色 位置和大小:(57,281,206,37)Button2 Title
22、:List Scene Font:System Bold 19.0 Text Color:白色 位置和大小:(40,4,127,30)View3 Alpha:0.5 Background:黑色 位置和大小:(57,351,206,37)Button3 Title:About Scene Font:System Bold 19.0 Text Color:白色 位置和大小:(40,4,127,30)在设菜单界面时需要注意以下两点:1.背景的生成背景的生成 在图 3.11 中可以看到在主菜单的界面上有一个背景,这个背景是采用了 Image View 图Swift 游戏开发实战教程大学霸 大学霸 像视
23、图对象实现的。首先,玩家需要在视图对象库中找到 Image View 对象,将其拖动到主菜单的界面中。然后,选择工具栏中的 Show the Attributes inspector 选项即属性查看器,在其中找到 Image 属性,将此属性设置为 backdrop2.jpg,如图 3.12 所示。Show the Attributes inspectorShow the Attributes inspector属性查看器属性查看器设置图像视图显示的图像设置图像视图显示的图像 图 3.12 设置 Image 属性 2.菜单项的设置菜单项的设置 按钮是玩家交互的最基础控件。对于它的使用首先需要从视
24、图对象库中拖动 Button 按钮对象,到主菜单的界面中,然后打开 Show the Attributes inspector 选项即属性查看器对按钮的一些属性进行设置,如按钮的标题、标题颜色、字体大小等等。3.4 配对模块 配对模块是程序的最重要的模块。它提供了玩家游戏的界面,同时,它会负责对玩家的操作做出响应。本节将讲解有关配对模块的操作。3.4.1 设计界面 在配对模块的游戏界面中,会拥有很多的卡牌,这些卡牌可以使用按钮进行实现。以下是游戏界面的设计步骤:在视图对象库中拖动 View Controller 视图控制器对象到画布中,然后对此视图控制器的界面进行设计,效果如图 3.13 所示
25、。Swift 游戏开发实战教程大学霸 大学霸 ButtonButton1 1-ButtonButton5 5LabelLabelButtonButton3131ViewViewImage ViewImage ViewButtonButton6 6-ButtonButton1010ButtonButton1111-ButtonButton1515ButtonButton1616-ButtonButton2020ButtonButton2121-ButtonButton2525ButtonButton2626-ButtonButton3030按钮的顺序都是从左往右的 图 3.13 界面的效果 需要
26、添加的视图对象以及对它们的设置如表 3-2 所示。表 3-2 设置界面 视图 设置 Image View Image:backdrop1.jpg 位置和大小:(0,0,320,568)Label Text:(空)Font:System 20.0 Alignment:居中 位置和大小:(0,20,320,39)Button1 Title:(空)Image:back.png 位置和大小:(15,90,50,50)Button2 Title:(空)Image:back.png Tag:1 位置和大小:(75,90,50,50)Button3 Title:(空)Image:back.png Tag:2
27、 位置和大小:(135,90,50,50)Button4 Title:(空)Image:back.png Tag:3 位置和大小:(195,90,50,50)Button5 Title:(空)Image:back.png Tag:4 位置和大小:(255,90,50,50)Button6 Title:(空)Font:System 18.0 Image:back.png Tag:5 位置和大小:(15,150,50,50)Button7 Title:(空)Image:back.png Swift 游戏开发实战教程大学霸 大学霸 Tag:6 位置和大小:(75,150,50,50)Button8
28、Title:(空)Image:back.png Tag:7 位置和大小:(135,150,50,50)Button9 Title:(空)Image:back.png Tag:8 位置和大小:(195,150,50,50)Button10 Title:(空)Image:back.png Tag:9 位置和大小:(255,150,50,50)Button11 Title:(空)Image:back.png Tag:10 位置和大小:(15,210,50,50)Button12 Title:(空)Image:back.png Tag:11 位置和大小:(75,210,50,50)Button13 T
29、itle:(空)Image:back.png Tag:12 位置和大小:(135,210,50,50)Button14 Title:(空)Image:back.png Tag:13 位置和大小:(195,210,50,50)Button15 Title:(空)Image:back.png Tag:14 位置和大小:(255,210,50,50)Button16 Title:(空)Image:back.png Tag:15 位置和大小:(15,270,50,50)Button17 Title:(空)Image:back.png Tag:16 位置和大小:(75,270,50,50)Button1
30、8 Title:(空)Image:back.png Tag:17 位置和大小:(135,270,50,50)Button19 Title:(空)Image:back.png Tag:18 位置和大小:(195,270,50,50)Button20 Title:(空)Image:back.png Tag:19 位置和大小:(255,270,50,50)Button21 Title:(空)Image:back.png Tag:20 位置和大小:(15,330,50,50)Button22 Title:(空)Swift 游戏开发实战教程大学霸 大学霸 Image:back.png Tag:21 位置
31、和大小:(75,330,50,50)Button23 Title:(空)Image:back.png Tag:22 位置和大小:(135,330,50,50)Button24 Title:(空)Image:back.png Tag:23 位置和大小:(195,330,50,50)Button25 Title:(空)Image:back.png Tag:24 位置和大小:(255,330,50,50)Button26 Title:(空)Image:back.png Tag:25 位置和大小:(15,390,50,50)Button27 Title:(空)Image:back.png Tag:26
32、 位置和大小:(75,390,50,50)Button28 Title:(空)Image:back.png Tag:27 位置和大小:(135,390,50,50)Button29 Title:(空)Image:back.png Tag:28 位置和大小:(195,390,50,50)Button30 Title:(空)Image:back.png Tag:29 位置和大小:(255,390,50,50)View Alpha:0.65 Background:黑色 位置和大小:(0,523,320,45)Button31 Title:Exit Font:System Bold 20.0 Text
33、:白色 位置和大小:(78,7,165,30)注意:在此界面中按钮 1 到按钮 30 用来实现记忆配对游戏中的卡牌功能。3.4.2 卡牌的翻转 本小节中将实现在配对游戏中轻拍卡牌(这里的卡牌就是按钮)后实现翻转的功能。1.创建文件创建文件 对于轻拍实现翻转动画这一功能,需要使用代码实现。为了使代码便于管理,在编写游戏代码之前,首先需要新建一个 Swift File 模板类型的文件,并命名为 Game。创建 Game文件的具体步骤如下:(1)选择菜单栏上的 File|New|File 命令,弹出 Choose a template for your new file:对话框,如图 3.14 所示
34、。Swift 游戏开发实战教程大学霸 大学霸 图 3.14 新建 swift 文件 1(2)选择 iOS|Source|Swift file 模板,单击 Next 按钮,弹出设置文件信息的对话框,其中包括文件名称和位置,如图 3.15 所示。文件保存的位置一般使用默认的位置 图 3.15 新建 swift 文件 2(3)输入文件名称后,单击 Create 按钮,此时就在创建的项目中新建了一个 Game.swift的文件。2.创建空类创建空类 在添加文件后,需要创建一个基于 UIViewController 类的子类,代码如下:import UIKit class GameSceneViewCo
35、ntroller:UIViewController 该类用于编写配对游戏的代码。3.视图控制器和类的关联视图控制器和类的关联 单击具有 31 个按钮的视图控制器,在此视图控制器中,选择界面上方的 Dock 中的 View Controller 图标。在工具窗口中的 Show the Identity inspector 选项即属性查看器,将 Custom Class 下的 Class 设置为创建的 GameSceneViewController 类。这时在画布中的这个视图控制器就变为了 Game Scene View Controller 视图控制器,如图 3.16 所示。Dock 的位置如图
36、 3.17所示。Swift 游戏开发实战教程大学霸 大学霸 Dock 图 3.16 关联视图控制器 图 3.17 Dock 4.轻拍卡牌后触发动作轻拍卡牌后触发动作 当玩家轻拍卡牌(按钮)后,就是产生卡牌翻转的效果,而这种效果就是动作被触发所产生的(动作是一种方法)。在 iPhone 游戏开发中,对于动作的触发,可以使用关联来实现。以下是动作关联的具体步骤:(1)使用调整窗口中的工具,将 Xcode 的界面调整为如图 3.18 所示的效果。这一过程在前面的章节中讲解过。图 3.18 操作步骤(2)按住 Ctrl 键拖动界面中的按钮对象,这时会出现一个蓝色的线条,将这个蓝色的线条拖动到 Game
37、.swift 文件中,如图 3.19 所示。Swift 游戏开发实战教程大学霸 大学霸 图 3.19 操作步骤(3)松开鼠标后,会弹出声明关联插座变量一起进行的对话框(在前面章节中讲解过),如图 3.20 所示。图 3.20 操作步骤(4)将 Connection 选项设置为 Action,将 Name 设置为 tileClicked,如图 3.21 所示。图 3.21 操作步骤 注意:这里的 Name 可以是任意的。(5)单击 Connect 按钮,会在 Game.swift 文件中看到如图 3.22 所示的代码。Swift 游戏开发实战教程大学霸 大学霸 动作 图 3.22 动作 此时,当
38、玩家轻拍卡牌后,一个叫 tileClicked()的方法就会被触发。注意:以上这一种方式是动作声明和关联一起进行的,还有一种先声明动作后关联的方式。声明动作可以使用关键字 IBAction。该关键字可以告诉故事面板的界面,此方法是一个操作,且可以被某个控件触发。声明动作的语法形式如下:IBAction func 动作名(参数:参数类型)如图 3.23 所示,就是在 Game.swift 文件中编写的动作的声明代码。动作 图 3.23 声明的动作 注意:在声明动作后,会在代码的前面出现一个空心的小圆圈,它表示此动作还未进行关联。声明好动作后,就可以进行关联了,具体操作步骤如下:(1)使用调整窗口
39、中的工具,将 Xcode 的界面进行调整。将其调整为和图 3.18 一样的效果。(2)按住 Ctrl 键拖动界面中的按钮对象,这时会出现一个蓝色的线条,将这个蓝色的线条和文件 Game.Swift 中的动作进行关联,如图 3.24 所示。Swift 游戏开发实战教程大学霸 大学霸 图 3.24 操作步骤(3)松开鼠标后,按钮对象就与动作成功的关联在一起了,此时动作前面的空心小圆圈就变为了实心的小圆圈,它表示此动作已被关联,效果和图 3.22 一样。以上是将第一个按钮和动作进行了关联,在本章将需要将第 1 个按钮一直到第 30 个按钮都与此动作进行关联。关联好的动作可以在按钮对象的连接查看器中看
40、到,如图 3.25 所示。关联的动作 图 3.25 关联的动作 5.实现卡牌的翻转实现卡牌的翻转 卡牌的翻转其实很简单,就是在轻拍按钮后改变卡通的显示图像即可。此功能的实现,需要使用到 setImage()方法,其语法形式如下:按钮对象.setImage(image:UIImage?,forState:UIControlState)其中,Image 用来指定显示的图像,forState 用来指定控件的状态,这些状态如表 3-3所示。Swift 游戏开发实战教程大学霸 大学霸 表 3-3 控件的状态 按钮的状态 解释说明 Normal 常规状态 Highlighted 高亮状态 Disabled
41、 禁用状态,不接受任何事件 Selected 选中状态 Application 应用程序标志 Reserved 为内部框架预留,可以不管他 以下是卡牌翻转的实现:首先需要在创建的 GameSceneViewController 类中初始化一个 tiles 数组对象。在这个数组对象中保存了一系列的图像。然后在 tileClicked()方法中添加代码,实现对卡牌的翻转效果,添加的代码如下:import UIKit class GameSceneViewController:UIViewController /初始化数组 var tiles:NSMutableArray=NSMutableArra
42、y(objects:UIImage(named:icons01.png),UIImage(named:icons01.png),UIImage(named:icons02.png),UIImage(named:icons02.png),UIImage(named:icons03.png),UIImage(named:icons03.png),UIImage(named:icons04.png),UIImage(named:icons04.png),UIImage(named:icons05.png),UIImage(named:icons05.png),UIImage(named:icons0
43、6.png),UIImage(named:icons06.png),UIImage(named:icons07.png),UIImage(named:icons07.png),UIImage(named:icons08.png),UIImage(named:icons08.png),UIImage(named:icons09.png),UIImage(named:icons09.png),UIImage(named:icons10.png),UIImage(named:icons10.png),UIImage(named:icons11.png),UIImage(named:icons11.p
44、ng),UIImage(named:icons12.png),UIImage(named:icons12.png),UIImage(named:icons13.png),UIImage(named:icons13.png),UIImage(named:icons14.png),UIImage(named:icons14.png),UIImage(named:icons15.png),UIImage(named:icons15.png)/点击按钮实现翻转 IBAction func tileClicked(sender:AnyObject)var senderID:Int=sender.tag;
45、/获取轻拍按钮的 tag 值 var tileImage:UIImage=self.tiles.objectAtIndex(senderID)as UIImage /设置图像 Swift 游戏开发实战教程大学霸 大学霸 sender.setImage(tileImage,forState:UIControlState.Normal)/设置按钮的图像 如果开发者想要查看配对模块中此时的效果,该怎么办呢,此时运行程序之后会看到主菜单,不会看到进行配对的游戏场景?它的解决办法如下:(1)回到 Main.storyboard 文件中。(2)单击具有 31 个按钮的视图控制器,在此视图控制器中,选择界面
46、上方的 Dock 中的 View Controller 图标,在工具窗口中的 Show the Attributes inspector 选项,即属性查看器选中,找到 Is Initial View Controller 复选框,将其选中,如图 3.26 所示。它的功能就是将此视图控制器变为运行应用程序后,除启动界面后出现的第一个界面即初始视图控制器。设置初始视图控制器 图 3.26 设置初始视图控制器 此时运行程序,可以看到如图 3.27 所示的效果。轻拍按钮轻拍按钮 图 3.27 运行效果 Swift 游戏开发实战教程大学霸 大学霸 3.5 核心功能卡牌的配对 以下是卡牌配对的具体实现步骤
47、。3.5.1 翻转两个卡牌 在上一小节的翻转卡牌时,可以看到所有的卡牌都是可以进行翻转的。而在一个正规的配对游戏中,连续翻转的卡牌只能为 2 个,再翻转第 3 个卡牌时,是不应该被触发的。以下就是对这一个功能的实现。首先需要声明和定义变量,代码如下:var isDisabled=false var tileFlipped:NSInteger=0 var tile1:UIButton=UIButton()var tile2:UIButton=UIButton()然后在 tileClicked()动作中,编写代码,实现翻转两个卡牌的功能,代码如下:IBAction func tileClicked
48、(sender:AnyObject)/判断轻拍的按钮是否禁用 if(isDisabled=true)return var senderID:Int=sender.tag;/判断翻转按钮的 tag 值是否大于 0,并且和当前轻拍按钮的 tag 值是否相等 if(self.tileFlipped=0&senderID!=self.tileFlipped)/翻转第二个卡牌 self.tile2=sender as UIButton var lastImage:UIImage=self.tiles.objectAtIndex(self.tileFlipped)as UIImage var tileIm
49、age:UIImage=self.tiles.objectAtIndex(senderID)as UIImage sender.setImage(tileImage,forState:UIControlState.Normal)isDisabled=true /禁用轻拍的卡牌 self.tileFlipped=-1 /将翻转的按钮设置为-1,表示没有进行翻转的卡牌 else /翻转第一个卡牌 self.tileFlipped=senderID self.tile1=sender as UIButton var tileImage:UIImage=self.tiles.objectAtIndex
50、(senderID)as UIImage sender.setImage(tileImage,forState:UIControlState.Normal)3.5.2 判断卡牌 当翻转两个卡牌后,就可以对这两个卡牌进行判断了。首先,需要添加一个变量,此变量是用来保存两个卡牌是否相等的值。代码如下:var isMatch=false 然后需要添加判断的代码,因为判断卡牌是否相等是在翻转第二个卡牌后进行的,所以需要在 tileClicked()方法中的禁用轻拍卡牌代码的后面添加以下代码:Swift 游戏开发实战教程大学霸 大学霸 sender.setImage(tileImage,forState