原文:
zh.annas-archive.org/md5/677EF72CE0EEA561393A2FD5106AE241
译者:飞龙
前言
乐趣是生活中娱乐的必要关键词。有许多平台专为娱乐而设,游戏是其中之一。世界各地有许多类型的游戏。曾经游戏局限于体育、棋盘游戏、纸牌游戏等。然后,游戏进入了数字领域,有了特定的游戏设备。逐渐地,它们现在已经进入了移动平台。Android 是最有前途的平台之一。Android 市场每天都在增长,而 Android 游戏也在随之增长。
本书主要面向游戏程序员。许多人认为游戏编程与其他任何编程工作相同。然而,我的个人观点不同——游戏编程不是坐在开放的代码编辑器旁,输入计算机语言,而是创造一种传播娱乐的媒介。
本书主要关注开发游戏的技术部分,特别是针对 Android。它将帮助开发者更好地创建游戏。游戏编程远比技术更为逻辑。我在这本书中试图用我迄今为止的职业经验来阐明这种逻辑。
本书涵盖内容
第一章,Android 游戏开发,将介绍在 Android 平台上游戏开发的准则和规则。
第二章,介绍不同的 Android 平台,将披露当前 Android 设备的各种变体,如智能手机、电视、平板电脑和智能手表。它将详细阐述在这些平台上创建游戏时可能遇到的所有可能困难和可能的解决方案。
第三章,不同的 Android 开发工具,将介绍开发 Android 应用程序的不同工具以及如何选择特定目的的合适工具。
第四章,行业中的 Android 开发风格和标准,将涵盖游戏开发领域中当前的开发风格和标准。这将主要讨论 Android SDK 上的 Java 游戏编码标准和风格。
第五章,理解游戏循环和帧速率,将演示使用 Android SDK(Java)创建和维护游戏循环。本章还将涵盖游戏循环对帧速率的影响。
第六章,改善 2D/3D 游戏的性能,将解释在 Android 上开发 2D 和 3D 游戏的所有限制,以及改进性能的常见错误和避免这些错误的方法。
第七章,使用着色器,将描述在 Android 平台上使用着色器。它通过 OpenGL 揭示了着色器在游戏开发中的作用范围。
第八章,性能和内存优化,将提供优化任何 Android 游戏的深入知识。
第九章,测试代码和调试,将教你调试 Android 游戏的不同方法。
第十章,VR 游戏中 Android 的发展前景,将介绍在 Android 上进行虚拟现实游戏开发的前景。本章描述了 VR 的各种发展前景以及在游戏开发中的未来。
第十一章,使用 C++和 OpenGL 开发 Android 游戏,将简要解释使用 C++和 OpenGL 进行游戏开发。
第十二章,“打磨 Android 游戏”,将专注于完成 Android 游戏并使其准备好发布。
第十三章,“第三方集成、货币化和服务”,将详细说明任何第三方工具或 SDK 的可能集成以实现游戏的货币化。
本书所需内容
假设读者已经是在 Android 平台上工作的游戏开发人员。您需要对使用 Java 和 C++进行 Android 编程有清晰的了解。
读者需要在各种 Android 开发平台上工作;大部分代码都使用 Android SDK。您还需要了解有关广告、分析、应用内购买等多个第三方 SDK 的概念。
本书适合对象
本书适合任何具有先前开发 Android 游戏知识的游戏开发人员。对游戏开发有良好的理解以及对 Android 平台应用程序开发和 Java/C++的基本知识将受到赞赏。
约定
在本书中,您将找到一些区分不同信息类型的文本样式。以下是这些样式的一些示例及其含义的解释。
文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄显示如下:“我们可以通过使用include
指令包含其他上下文。”
代码块设置如下:
<application
<!-- other declarations and tags -->
android:isGame="true"
<!-- other declarations and tags -->
>
任何命令行输入或输出都以以下方式编写:
cd platform-tools
新术语和重要词汇以粗体显示。您在屏幕上看到的词语,例如菜单或对话框中的词语,会在文本中显示为:“在配置项目窗口中,输入应用程序的名称。”
注意
警告或重要说明会显示为这样的框。
提示
提示和技巧会显示为这样。
第一章:安卓游戏开发
在过去的十年里,游戏开发已经成为一个非常受欢迎的职业。以前,它局限于个人电脑、游戏机和一些嵌入式游戏设备。如今的世界完全配备了现代化的设备,技术更好,便携性更好,灵活性更好,质量更好。这为开发者创造更高质量的游戏和减少限制打开了大门。
安卓是一个现代操作系统,被广泛应用于许多硬件平台。因此,安卓世界已成为游戏开发者的目标。最有效和有用的目标是安卓智能手机和平板电脑。根据全球移动操作系统市场份额的调查,2015 年安卓占据了 78-80%的份额。安卓现在不仅是一个移动操作系统,还被用于电视和智能手表。因此,安卓在游戏开发者中的受欢迎程度正在飙升。
这本书对那些已经有安卓游戏开发背景的人会有所帮助。让我们从以下主题开始:
-
安卓游戏开发
-
游戏不仅仅是一个应用程序。
-
为你的游戏选择目标设备配置
-
在安卓上制作游戏的最佳实践
安卓游戏开发
现在让我们专注于本书的主题。尽管游戏开发涵盖了许多平台和技术,但本书只关注安卓。
安卓是基于 Linux 内核的移动操作系统。目前由谷歌开发。自 2008 年以来,该操作系统已发布了许多版本。但在发布安卓 2.2(Froyo)和安卓 2.3(Gingerbread)之后,这个操作系统引起了许多游戏开发者的注意。安卓使用所谓的达尔维克虚拟机(DVM),这是Java 虚拟机(JVM)的开源实现。达尔维克和标准 JVM 之间有一些差异,有些微妙,有些不那么微妙。DVM 也不是针对 Java SE 或 Java ME,而是针对一个名为 Apache Harmony Java 的 Apache 实现。如果你刚好从 Java ME 过渡过来,这些都会造成一些学习曲线。谷歌在安卓 4.4(KitKat)中推出了一种名为安卓运行时(ART)的 DVM 替代方案,ART 从安卓 5.0(棒棒糖)开始取代了 DVM。ART 主要特点是提前编译(AOT)和改进的垃圾回收过程,并提供更小的内存占用以优化内存操作。然而,大多数游戏开发者使用 DVM 来支持旧版本的安卓设备。
当许多硬件平台开始采用这个操作系统时,安卓游戏开发开始大规模开展。安卓主要被用于移动和平板设备。当移动游戏行业开始从 Symbian 或 Java 迁移到安卓或其他智能移动操作系统时,安卓游戏开发开始蓬勃发展。
安卓游戏成功的原因有几个:
-
流畅的用户界面
-
更好的互动性
-
触摸界面
-
更好的外观和感觉
-
更好的硬件平台
-
更多设计灵活性
使用通用操作系统总比使用嵌入式实时操作系统(RTOS)更容易。用户不需要花时间学习不同硬件的可用性。安卓就是这样一个易于使用的操作系统。
在安卓中,视觉用户界面非常吸引人,因为它总是在比 Symbian、Java 或嵌入式操作系统更好的硬件配置上运行。这增强了用户体验,这也是为什么它被这么多组织所采用的原因之一。随着安卓用户群的增加,许多游戏开发者开始瞄准这个平台。
从游戏设计的角度来看,增强的安卓功能列表给移动游戏的探索提供了灵活性。因此,游戏设计风格得到了提升。
当前世界上有各种类型的运行 Android 的硬件。除了手机,Android 还被用于平板电脑、电视、手表、游戏机、数码相机、个人电脑和其他设备上。如今,游戏开发者几乎在每个 Android 平台上进行开发。
功能和支持
直接操作界面是 Android 的顶级特性。它通过持续表示感兴趣的对象、动态实时操作和动态反馈与用户进行交互。Android 主要使用触摸界面,实时操作如滑动、拖动、轻击和多点触控,在 Android 游戏开发中被广泛使用。
Android 应用程序开发主要基于 Java(SDK)和 C++(NDK),这是世界上最常见的编程语言。因此,开发游戏变得更加容易。
出色的多媒体支持使 Android 在赢得流行度方面迈出了一大步。游戏开发者现在可以在游戏中自由使用多媒体对象,以提高游戏质量。
自 2.2 版(Froyo)以来,谷歌开发了一个名为 Google Play 服务的集成服务。这是一个封闭的系统级 API 服务提供商,在游戏开发中非常有用。
对于 Android 开发,有大量的第三方工具可用,这也使游戏开发者的工作变得更加轻松。我们可以提到一些工具,如 Android Studio、App Inventor、Corona、Delphi、Testdroid、Sample Directmedia Layer、Visual Studio、Eclipse IDE 和 RubyMotions。
Android 设备硬件配置必须遵循一个最低配置列表,这样开发者就可以很容易地识别配置。此外,它必须保持一个最低标准,以便轻松运行应用程序。
与 Android 设备(主要是手机或平板电脑)相关联的传感器有很多,这对于设计游戏的控制是一个非常好的选择。
Android 通过蓝牙、Wi-Fi、GSM/CDMA/EDGE、LTE、NFC、IDEN 等提供了出色的连接功能。这些帮助游戏开发者轻松创建多人游戏。
虚拟现实是另一个领域,Android 通过 Cardboard SDK 被使用。我们稍后会更详细地讨论这个话题。
这些是游戏开发者应该牢记的特性。其他特性对于游戏开发来说不那么重要。然而,总是有机会去探索更多,并创建一些特定特性导向的游戏。
挑战
在 Android 平台上开发游戏的主要挑战是以高效的方式充分利用其功能。
Android 设备配置范围广泛。因此,针对大多数设备设计游戏是一个很大的挑战。
许多 Android 游戏开发者为特定的硬件配置设计和构建游戏,比如 Tegra 或 Snapdragon,或者像 Xperia Play 这样的特定设备。Nvidia 的 Tegra 是这些情况下最常用的芯片;THD品牌通常表示游戏是专为 Tegra 构建的。Nvidia 在桌面端与开发者合作方面拥有丰富的经验,并将这一专业知识带到了移动设备上。鼓励 Android 游戏开发者利用 Tegra 特定的 API 来构建他们的游戏。这种情况的问题在于大多数用户的手机上并没有 Tegra。事实上,许多本来可能搭载这种游戏友好芯片的 LTE 手机现在都转向了 Snapdragon S4。对于开发者来说,要在不同的图形处理器上保持性能非常困难。
用户体验
Android 游戏可以通过其功能提供出色的用户体验。
游戏控制可以利用加速计或重力传感器进行基于物理的机制(如果硬件支持),这总是实时互动的一个额外优势。
在触摸屏设备上,可以通过 Android 体验到诸如滑动、拖动、捏合和多点触控等动态控制。
Android 支持 OpenGL 以获得更好的图形渲染,从而增强游戏的视觉质量。
Android 中的 Miracast 是另一个功能,它使游戏可以使用多个显示屏和屏幕共享,以获得更好的体验。
设计约束
任何游戏的开发都需要一个设计,Android 也不例外。Android 游戏的设计需要对目标硬件有很多了解。Android 有成千上万种不同的设备。设计师必须非常谨慎地选择他们的目标,然后设计游戏范围。
正如之前所述,这不仅对程序员是一个挑战,对设计师也是如此。不同的 Android 设备具有不同的配置,但对于设计师来说,有必要针对共同特征。
游戏不仅仅是一个应用程序
应用程序开发人员经常转向游戏开发,反之亦然。许多人不改变他们的风格,并相应地进行游戏开发。每个游戏开发者都应该记住游戏不仅仅是一个应用程序。
游戏与应用程序
游戏可以简称为交互式娱乐系统。游戏的主要目标是提供乐趣,无论是软件还是体育锻炼。另一方面,应用程序的主要目标是通过机械工作使生活更轻松。因此,这两者的开发方法完全不同。然而,这仍然是一个讨论的焦点,因为每个游戏都是一个应用程序。任何应用程序都可以适应游戏的特性,以提供更好的用户体验。
很难区分游戏开发与应用程序开发的复杂性。然而,游戏开发有优势。大多数应用程序开发者不必过多关注速度性能,而所有游戏开发者都必须关注游戏的速度和帧率。
每个游戏肯定都是一个应用程序,但并非每个应用程序都是一个游戏。这个陈述本身传达了这样一个信息,即在一个参考标准上,游戏开发的参数比应用程序更多,但它必须具有应用程序的所有特性。
应用程序开发是技术导向的,而游戏开发是以乐趣为导向的。这增加了游戏开发的困难。乐趣是一种情感,没有参数可以计算。因此,在制作游戏时,开发人员永远无法知道游戏在乐趣方面到底能达到什么程度。另一方面,应用程序开发人员非常确定,只要所有规格满足要求,应用程序目标就可以实现。
游戏开发非常严格地需要数学来处理物理或图形方面;即使 AI 也需要大量的数学来处理低级别的东西。应用程序更多地受技术驱动,图形的使用有限。
任何符合游戏资格的应用程序必须满足以下标准:
-
它必须在乐趣方面满足一组用户
-
必须有一组里程碑供应用程序用户实现
-
它应该奖励用户达到里程碑
-
它应该有一个更动态的用户界面
-
必须有更好的视觉冲击
-
它应该是以性能为驱动而不是以功能为驱动
Android 应用程序和游戏的生命周期
应用程序生命周期适用于在同一平台上制作的任何游戏。但是游戏的周期更多,如下图所示:
应用程序的生命周期比游戏生命周期简单。游戏周期在应用程序生命周期的运行阶段内运行。这通常被称为游戏循环。这将在后面详细讨论。
这个游戏循环在游戏状态上运行。应用程序可能只有一个运行状态,但有多个游戏更新状态。在典型的游戏开发系统中,至少有两个更新状态。一个取决于游戏循环的执行,另一个取决于时间间隔。第二个实际上控制着帧率。
游戏和应用程序的性能
游戏和应用程序的性能管理系统之间存在明显的差异。性能是游戏开发中最大的要求之一,而对于应用程序来说,它只是一个推荐的特性,因为帧率不会影响质量。
公认的事实是,游戏比同样规模的应用程序更重。游戏在重复的帧上运行一组任务。这增加了处理器的指令流量。在应用程序中,通常没有循环;应用程序的状态取决于用户的操作。在这种情况下,处理器有足够的时间来执行指令,因为没有重复发送指令。
游戏和应用程序的内存管理
不是游戏的应用程序与游戏有不同的内存管理。在游戏的情况下,多媒体资产是主要对象,占用堆的比例比类对象大。但在应用程序的情况下,情况正好相反。应用程序只需要加载它们需要的对象,即类对象。
对于任何游戏开发者来说,内存优化是必须的。由于内存的广泛使用,开发者不能承担在内存中加载未使用的对象,或者由于处理不当的内存指针导致的内存泄漏。这直接影响游戏的运行。对于应用程序,内存优化显然是一个好的实践,但大多数情况下对应用程序的运行没有直接或间接的影响。然而,一个好的程序员应该始终了解内存优化。
选择目标设备配置
如前所述,安卓有各种设备配置。因此,对于安卓游戏开发者来说,非常重要的是要非常谨慎地选择目标。一般的方法应该具有这些参数:
-
游戏规模
-
目标受众
-
功能要求
-
可移植性的范围
游戏规模
这基本上是游戏制作的规模。规模越大,需要的配置就越好。这主要包括游戏大小,即它在设备上消耗的内存量。许多安卓设备配置的 RAM 和内部存储空间非常低。如果目标设备没有所需的配置,游戏将无法运行。即使游戏经过了充分优化,也可能因为运行的硬件平台而失败。
每个游戏都需要一组递归执行的进程,这需要处理器速度。如果游戏的进程密集,并且目标设备的处理器速度较慢,游戏将出现一些可怕的帧率问题,或者崩溃。
每个安卓游戏开发者在选择目标设备时必须了解内存、处理器和其他约束的要求。
让我们以一个需要至少 120MB 磁盘空间安装、512MB RAM 运行和 1.2 GHz 处理器速度达到良好帧率的安卓游戏为例。现在考虑一个移动设备,它完全符合这些规格,但作为开发者,不能假设设备没有安装或并行运行其他应用程序。因此,在这种情况下,即使设备符合要求,也有一个合理的假设,即游戏将无法获得所需的支持。因此,对于这个例子游戏,目标设备必须比最低要求更高配置。
现在,让我们看看相反的情况。假设相同的游戏要求,考虑一个具有 8GB 可用存储空间、2GB RAM 和 2GHz 多核处理器的设备。毫无疑问,游戏将在该设备上以最佳性能运行,但该设备本可以支持更大规模的游戏。因此,在这种情况下,资源利用效率不高。这就是移植的作用。游戏开发者应提升游戏质量,并为这些高端配置设备创建不同的版本。
在行业中,通常会排除一些设备,以使游戏能够正常运行。在一些情况下,游戏开发者会创建单独的游戏版本,以支持大多数设备并保持游戏质量。
目标受众
目标受众是制作游戏的特定群体。人们认为特定的一群人会从游戏中获得最多的乐趣,或者他们会比其他人更多地玩这个游戏。
每个游戏设计都有其目标受众。目标设备的集合是目标受众的直接结果。例如,如果目标受众是 25 至 40 岁的职业人士,无论游戏规模如何,为 Android 电视创建游戏都没有意义。这是因为这个特定的受众大多会使用移动设备,因为他们没有时间坐在电视机前。因此,针对这个目标受众的目标设备列表应包含移动设备。
我们可以看到同一类别的设备之间存在很大的差异。现在,让我们以 Android 手机为例,因为这是最常用的 Android 类别。我们可以看到市场上有各种 Android 设备。大多数 Android 手机价格相对较低,功能较少。使用这类手机的目标受众大部分属于亚洲或第三世界国家。因此,在为这个目标受众制作游戏时,开发者应考虑最低配置目标。
功能需求
功能需求完全取决于游戏设计。当我们谈论 Android 游戏时,主要关注的是移动和平板平台。大多数 Android 游戏都是为这些设备制作的。
如果我们考虑其他平台,如手表、电视或游戏机,功能集会有所不同。电视提供较大的显示屏,用户控制较少,手表的显示区域有限,配置最低,游戏机具有更好的图形质量和专用控制等。识别所需的硬件设备的功能列表非常重要。
可能存在这样一种情况,游戏中使用了加速计、蓝牙、Wi-Fi 或其他特殊功能,因此所选的硬件平台必须具备这些功能。然而,普通的移动设备和平板设备几乎具有游戏开发者通常会使用的相同功能集。当为某些特定的硬件平台(如游戏机或 VR 设备)制作 Android 游戏时,这种功能依赖变得非常具体。
可移植性的范围
在选择目标硬件设备时,每个游戏开发者都必须考虑游戏的可移植性。游戏变得越可移植,选择目标硬件所需的工作量就越少。
游戏的可移植性始终取决于游戏开发者的愿景。移植可以采用两种不同的方法:平台移植和硬件移植。在这里,我们只关注硬件移植,因为我们已经确定了平台为 Android。
游戏开发者应该专注于以下几点,以增加游戏的可移植性:
-
创建不同的资产集
-
设计不同的控制集
-
查找和列出功能的替代方案
-
控制内存使用
-
控制帧率
一个好的便携游戏是所有这些前述要点的平衡组合。大多数情况下,目标硬件是根据其他参数首先选择的,然后开发者才会着手游戏的可移植性。
制作 Android 游戏的最佳实践
制作 Android 游戏并不是一件大事。但是通过正确的方式制作游戏,使游戏在尽可能多的设备上看起来很棒,并且性能良好,这是非常重要的。最佳实践应该关注以下几点:
-
维护游戏质量
-
极简用户界面
-
支持最大分辨率
-
支持最大设备
-
后台行为
-
中断处理
-
维护电池使用
-
对多种视觉质量的扩展支持
-
引入社交网络和多人游戏
让我们在这里简要讨论一下。随着书籍的进展,我们将在后面详细阐述这些内容。
维护游戏质量
市场上有数百万款游戏,每周都有数千款新游戏推出。因此,仅仅制作一个好游戏已经不够了。每个开发者都应该定期维护他们的游戏,以适应其他改进游戏的质量。
开发者应该时刻关注用户的评论和投诉。根据这些反馈,游戏的质量可以得到很大的改善。在游戏上市之前,没有人能够准确预测用户对游戏的反应。因此,在大多数情况下,游戏的设计或其他方面都会经历剧烈的变化,以保持消费者的满意度。
还有一些其他跟踪消费者/玩家行为的方法。有几种工具可以高效地完成这项工作,比如 Google Analytics、Game Analytics、Flurry 等等。除了这些内部集成,用户在商店或博客上的评论也有助于维护游戏的质量。
修复游戏中的错误是提高游戏质量的另一个重要因素。在开发过程中不可能摆脱游戏内的所有错误。应用商店的错误报告工具对于跟踪游戏上市后的重大崩溃和 ANR 非常有用。除此之外,开发者可以使用 Android 错误报告来跟踪真实用户的错误和 bug。Android 在 2.2 版本及以后提供了这个功能。
提高游戏质量的另外两个因素是稳定的游戏玩法和一致的帧率。
极简用户界面
这是 Android 游戏的典型设计实践。许多开发者犯的一个常见错误是设计一个冗长而繁琐的用户界面来引导用户进入游戏。这一部分应该尽可能地简短。玩家应该在第一次体验游戏时尽量少地付出努力。大多数用户会因为繁重的 UI 界面而离开游戏。
从技术上讲,开发者应该注意设备的 UI 选项,比如菜单、返回和主页。这些是 Android 手机和平板电脑平台上最常见的选项。所有这些选项的行为应该在游戏内进行控制,因为用户在玩游戏时可能会意外按到/触摸到它们。此外,应该有一个快速的界面来退出游戏。
基本上,拥有最少的用户界面和较少的屏幕切换可以节省大量时间,这对游戏的游戏时间有直接影响。
支持最大分辨率
这是制作一个好的 Android 游戏的一个非常明显的要点。游戏必须支持尽可能多的分辨率。特别是 Android 在市场上有许多不同的屏幕尺寸可用。
Android 有一系列不同的分辨率集:
-
LDPI(大约 120 dpi)
-
MDPI(大约 160 dpi)
-
HDPI(大约 240 dpi)
-
XHDPI(大约 320 dpi)
-
XXHDI(大约 480 dpi)
-
XXXHDPI(大约 640 dpi)
如果他们不遵循多个分辨率规范,开发者也可以选择作为最后手段的屏幕兼容性选项。然而,建议不要使用这个 Android 的功能,因为它可能会显著降低视觉质量。这个选项在 Android API 版本 11 中默认是禁用的。
支持最大设备
除了不同的屏幕尺寸,Android 还有各种设备配置。大多数开发者只通过屏幕分辨率来过滤设备列表,这是一个不好的做法。Android 游戏开发者应该始终考虑目标设备配置以及分辨率。
在构建他们的应用程序时,开发者应该记住不要对特定的键盘布局、触摸界面或其他交互系统做出假设,除非游戏被限制只能在这些设备上使用。
在内存和性能方面优化应用程序也有助于支持更多设备。开发者不应该将其限制在只支持少数设备。最佳地利用磁盘空间和处理器可以增加支持范围的机会。
一个游戏应用程序构建可以通过一些简单的技巧支持更多设备。在 Android 活动启动时,开发者应该检测硬件信息,并使用它来创建某种规则,通过这些规则可以控制整个游戏的质量和处理速度。
后台行为
在主线程运行时,游戏中的一些任务可能会在后台运行。这些被称为异步任务,主要用于加载大文件或从互联网获取数据。
另一种后台任务称为服务,即使主应用程序线程没有运行,也可以工作。这是一个非常有用的功能,用于与安装了游戏的设备进行通信。
对于任何游戏开发者来说,合理使用这些功能是一个很好的做法。通常大量的数据需要更长时间,但不应该暂停游戏循环。在另一种情况下,异步任务用于游戏与互联网或其他连接进行通信。这个功能有助于保持主线程运行,并提供动态反馈。
后台服务对增加开发者和用户之间的通信很有用。它们可以提供用户活动信息,以改进游戏,并通知用户有关最新更新或信息。
中断处理
中断处理是游戏开发中最棘手的部分之一。正如我们之前讨论过的游戏循环一样,循环会在任何外部中断时暂停或有时终止。在进行中的游戏周期中,中断不应该影响游戏体验。对开发者来说,一个非常常见的问题是游戏在被中断后重新启动。如果 Android 游戏活动在空闲状态下保持很长时间,或者其他活动需要运行,Android 很可能会终止游戏活动。在这些情况下,大多数时候玩家会失去他/她的进度。
定期保存用户进度是一个很好的做法,以避免数据或进度的丢失。但保存数据可能会导致游戏循环出现延迟,并且可能会显著降低帧率。游戏开发者应该确定可以在不影响游戏体验的情况下保存数据的状态。
在多活动应用程序中处理这个问题的方法是检测并暂停/恢复所有正在运行的线程。很多时候,游戏开发者会保持线程运行,因为主要目标只是在中断时正确地暂停/恢复游戏循环。在大多数情况下,所有的后台进程都不会暂停,导致游戏出现异常行为。
维护电池使用
Android 游戏成功的原因之一是功耗效率。Android 硬件平台很可能是移动设备,其电源来源有限。因此,节能应用程序总是首选。
电池的主要部分被渲染和网络连接所消耗。从游戏的角度来看,渲染和连接都是必要的。因此,游戏消耗大量电力的可能性很大。
大多数游戏开发人员都非常注重视觉效果。这会提高图形质量,同时也会增加电池消耗。因此,开发人员始终应更多关注图形资产的技术质量是一个非常好的做法。资产不应该增加处理或渲染,因为开发人员经常使用非优化的资产。
另一个消耗大量电池的过程是后台服务。这些广泛用于与消费者更好地连接或用于一些基于网络的服务。从技术上讲,这个过程频繁地 ping 以保持与所需网络的连接。开发人员可以控制这种频率。避免这种情况的另一种方法是通过使用 Android PackageManager杀死长时间未连接或已从网络断开连接的服务。
在许多情况下,人们会发现一个游戏变得流行,或者用户数量比其他质量更好的游戏更多,仅仅是因为电池消耗较低。
如果开发人员可以确定连接丢失,那么除了连接更改接收器之外,可以使用本机 API 禁用所有接收器。相反,一旦开发人员连接,他们可以停止监听连接更改,并在执行更新之前立即检查应用程序是否在线;然后可以重新安排定期更新警报。
开发人员可以使用相同的技术来延迟需要更高带宽才能完成的下载,只需启用广播接收器,监听连接更改,并在应用程序连接到 Wi-Fi 后才启动下载。这可以显著减少电池使用。
对多种视觉质量的扩展支持
这一部分实际上是从支持多种分辨率开始的。我们已经讨论了具有不同 dpi 的多尺寸屏幕。以下列表是 Android 设备遵循的另一个标准:
-
QVGA(低 PPI)
-
WQVGA(中低 PPI)
-
HVGA(中等 PPI)
-
WVGA(中高 PPI)
-
SVGA(高 PPI)
-
VGA(非常高 PPI)
使用这种标准创建图形始终是有益的,以实现跨设备的最佳视觉质量。这种表示法主要取决于屏幕大小,而不是分辨率。在 Android 设备上,相同的分辨率在不同的屏幕尺寸上运行是非常常见的。专门为目标设备优化的资产将有助于提高视觉质量。
引入社交网络和多人游戏
游戏行业的风格和标准正在迅速变化。现在游戏被用于社交连接,即在单个平台上连接多个真实用户。非常谨慎地使用这种社交元素可以显著增加用户群和留存率。
在许多游戏中,有可能让多个用户一起体验相同的游戏状态,并通过实时互动来改善游戏玩法。一些棋类游戏,如国际象棋、飞行棋和蛇梯棋,就是这种可能的例子。除此之外,一些实时在线多人游戏也正处于巅峰状态。
谷歌通过 Google Play 服务拥有自己的多人游戏功能。除了流行的回合制和实时多人游戏支持外,谷歌还通过 Wi-Fi 引入了一项功能,可以将靠近的玩家连接到单个平台上,称为Google Nearby。还有许多其他第三方平台支持多人游戏。
总结
制作安卓游戏并不困难,但要制作一款成功的游戏就不同了。从技术角度来看,一款成功的游戏必须提供流畅的游戏体验,为用户提供出色、迅速的游戏体验。出色的视觉质量和更好的图形总是吸引用户和其他潜在玩家,而较少的错误可以消除用户在游戏过程中的烦恼,游戏可以按计划进行。广泛的设备支持可以增加用户数量和游戏次数,资源的最佳利用确保了最小可能的应用程序包大小,最后,开发者与用户之间良好的关系,通过出色的沟通技巧,可以消除用户的一些疑虑和困惑。
我们已经简要介绍了所有这些要点,以便让您了解如何制作一款成功的安卓游戏。制作安卓游戏与制作任何软件并无二致。然而,为了实现游戏的乐趣元素,游戏必须遵循一些实践。您将在本书的后面详细了解如何制作高效的安卓游戏。您还将最终了解安卓平台的游戏开发的几个方面。您将认识并了解由各种制造商制造的当前可用安卓设备的现状。有许多类型的设备,我们将一一了解。
我们将尝试探索一种更好、更高效的安卓游戏开发方法,针对不同硬件平台有许多开发流程、风格和标准。我们将进一步深入,针对 2D、3D 和虚拟现实游戏制定特定的开发标准。我们还将讨论原生开发,包括着色器和各种优化技术。
最后,我们将探讨各种使游戏成功的方法,从盈利的角度来看是足够好的。由于开发者必须了解每个用户的行为以使游戏更好,您可以通过本书了解从用户那里收集到的数据的力量。
第二章:不同 Android 平台的介绍
第一款商用发布的 Android 设备是HTC Dream。在 2008 年,这款手机推出了一个新的基于 Linux 的操作系统 Android。从那时起,成千上万的制造商开始为他们的设备使用 Android。起初,Android 在移动操作系统中变得流行,如 Symbian、Java ME、Blackberry 和 iOS。新一代技术对于一个新的、轻量级、用户友好和价格实惠的操作系统有了需求。Android 满足了这些要求,并比 Blackberry 和其他竞争操作系统更快地获得了动力。
根据最新的市场研究,在 2016 年第一季度,Android 占据了 76%的市场份额,这本身就解释了它的成功。随着时间的推移,Android 已经将其领土从手机扩展到其他有用的硬件平台,如平板电脑、电视、手表、游戏机等等。
在本章中,我们将从游戏开发的角度探索这些平台。让我们快速看一下我们将要涵盖的主题:
-
探索 Android 手机
-
探索 Android 平板
-
探索 Android 电视
-
探索 Android 游戏机
-
探索 Android 手表
-
Android 手机开发见解
-
Android 平板开发见解
-
Android 电视和 STB 的开发见解
-
Android 游戏机的开发见解
-
Android 手表的开发见解
-
每个平台都有自己的特色
-
为同一款游戏进行跨平台开发
-
设计前所需的限制测量
我们将尝试了解所有平台及其详细信息,以便开发游戏。现代世界已经见证了游戏现在不仅仅局限于 PC 或游戏机。它们已经成为几乎所有事物的一部分。因此,对于 Android 游戏开发者来说,对可能对游戏有用的所有可能的硬件有一个良好的了解是非常重要的,这也为一些其他可能性打开了机会。
探索 Android 手机
Android 手机设备对于游戏开发者来说是最重要的设备。移动技术在过去的十年里经历了巨大的革命,从黑白像素手机到现代智能手机。目前,与最接近的竞争对手 iPhone 相比,Android 手机设备在市场上领先了很大一部分。
最初的 Android 游戏在 Android 1.6 发布后获得了动力,随后是 Android 2.3。即使在今天,仍有许多设备在运行 Android 2.3。这就是为什么许多流行的跨平台游戏引擎支持 Android 2.3。
曾经有一段时间,Android 的最低要求是 32MB 的 RAM,32MB 的磁盘空间和 200MHz 的处理器。如果我们看一下当前的设备规格,就会发现有了很大的变化。如今,Android 手机设备平均拥有 1GB 的 RAM,1GHz 的处理器和 4GB 的磁盘空间。大多数设备都有多核处理器。然而,这种提升并没有简化游戏开发者的生活;相反,它增加了更多的复杂性。
让我们来看一下配置较低的低预算 Android 设备的规格。以下示例表格显示了 Micromax Bolt A24 的配置:
处理器 | Cortex A5 |
---|---|
速度 | 1GHz |
RAM | 256MB |
闪存 | 512MB |
屏幕模式 | NA |
屏幕分辨率 | 480x640 |
屏幕尺寸 | 2.8 英寸 |
Android 版本 | 2.3(姜饼) |
以下是它的外观(图片来源:www.androided.in/wp-content/uploads/2014/02/Micromax-BoltA24.jpg
):
现在让我们来看一下配置非常高的高预算 Android 设备。以下表格显示了三星 Galaxy S6 的配置:
处理器 | Cortex A57 |
---|---|
速度 | 2.1GHz 四核 |
RAM | 3GB |
闪存内存 | 128 GB |
屏幕模式 | NA |
屏幕分辨率 | 1440x2560 |
屏幕尺寸 | 5.1 英寸 |
安卓版本 | 5.0.2(棒棒糖) |
它看起来是这样的(图片来源:talishop.ru/data/big/eew.jpg
):
每个安卓游戏开发者都应该清楚地意识到,单个游戏构建无法在所有配置上实现最佳性能。很显然,如果游戏在 Micromax Bolt A24 设备上运行良好,那么它肯定会在三星 Galaxy S6 上表现不佳。所谓的“表现不佳”,是指三星 Galaxy S6 上的游戏质量远低于预期。因此,对游戏可移植性有一些想法是非常好的。我们将在后面详细讨论这个问题。
以下图表显示了自 2012 年以来手机市场份额:
正如你所看到的,大部分市场被安卓占据,而 iOS 则落后很多。
其他移动操作系统如 Windows Phone、BlackBerry、Java、Symbian、Bada、QT 等都远远落后。因此,可以预测未来的手机市场将由安卓和 iOS 主导。
安卓手机市场日益扩大。设计和开发变得更加艰难、棘手,市场竞争也更加激烈。每天都有数以万计的新游戏在诸如 Google Play 商店、亚马逊应用商店、一些特定职业商店以及许多个人在线网站上推出。
我们之前已经讨论过游戏的目标受众。在探索安卓手机设备时,我们需要了解用户群体。在大多数情况下,用户类别是通过设备配置或价格群体来识别的。
探索安卓平板电脑
安卓平板与安卓手机非常相似。安卓手机和安卓平板的主要规格区别在于物理尺寸和屏幕分辨率。一般来说,安卓平板的 PPI 比手机低。然而,并没有硬性规定或任何特定系统来衡量这一点。
运行安卓的最低要求是 200 MHz 处理器,32 MB RAM 和 32 MB 磁盘空间。安卓需要 ARMv5 或更高的处理器,尽管安卓 4 需要 ARMv7。以前,起步年龄的平板几乎都是最低硬件系统。
平板电脑起源于平板电脑的概念;它们由触摸屏显示器、摄像头、麦克风、扬声器和一些物理按钮组成。平板电脑通常比手机或 PDA 大。
最低配置的安卓平板是 Coby Kyros MID7047,如图所示(图片来源:www.evisionstore.com/catalogo/coby_mid7012-4g.jpg
):
以下表格显示了它的规格:
处理器 | Cortex A5 |
---|---|
速度 | 1 GHz |
RAM | 512 MB |
闪存内存 | 4 GB |
屏幕模式 | WVGA |
屏幕分辨率 | 800x480 |
屏幕尺寸 | 7.00 英寸 |
安卓版本 | 4.0(ICS) |
2013 年,安卓平板销量约为 62%,销量超过 1.21 亿台设备。再加上亚马逊 Kindle Fire 销售了约 700 万台设备。
随着安卓平板的销量增加,配置也在不断提升。让我们来看看索尼在 2015 年 6 月发布的一款平板配置。这款型号被称为索尼 Xperia Z4(图片来源:tecneticoc1.wpengine.com/wp-content/uploads/2015/03/z4tab.png
):
以下表格显示了它的规格:
处理器 | 骁龙 810 |
---|---|
速度 | 2 GHz 八核 |
RAM | 3 GB |
闪存 | 32 GB |
屏幕分辨率 | 2560x1600 |
屏幕尺寸 | 10.1 英寸 |
Android 版本 | Android 5.0(棒棒糖) |
我们可以清楚地观察到这两款平板电脑之间的巨大配置差异。有趣的是,即使在今天,这两种配置仍然共存,并且人们在购买它们。
Android 平板电脑通常比智能手机更大更重。它们还具有更好的电池容量。因此,平板电脑的游戏应该是节能的。然而,现代平板电脑与智能手机并没有太大区别。智能手机的尺寸越来越大,智能手机的功能也被添加到平板电脑上。现在,人们甚至可以将平板电脑用作手机。
探索 Android 电视和机顶盒
在 Android 手机和平板电脑取得成功之后,Android 开始向其他硬件平台扩张。电视成为下一个目标,因为智能电视的概念已经存在市场上。因此,通过 Android,电视机成为了互动的。Google 推出了一些额外的配件,以提高 Android 电视的用户体验。
首款面向消费者推出的 Android 电视设备是 2014 年 11 月 3 日的 Nexus Player。其规格如下:
-
英特尔 Atom Z3560 1.8 GHz 四核处理器
-
1 GB RAM
-
8 GB 闪存
-
Android 5.1.1 棒棒糖
这就是它的样子(图片来源:1.bp.blogspot.com/-H1rp1fboU6g/VX2Huu6ClyI/AAAAAAAA3hA/5te4NZ65Tgg/s1600/nexus_player.jpg
):
这是第一种 Android 电视设备,与 Google TV 非常相似,也可以与 Apple TV 相媲美。
除了 Nexus Player,还有一些其他支持 Android 的机顶盒设备:
-
Freebox Mini 4K:这是一款 4K 能力的电视机顶盒,最初由一家法国 ISP 与光纤调制解调器一起提供。
-
Forge TV:这是一款具有高性能硬件规格的电视/微型游戏机,由 Razer 于 2015 年 1 月 6 日宣布。它配备了高通骁龙 805 处理器、2 GB RAM 和 16 GB 闪存。
-
Shield Android TV:这款设备是由 NVIDIA 于 2015 年 3 月 3 日宣布的。它声称能与第八代游戏机展开激烈竞争。这套硬件配备了一款 NVIDIA 品牌的游戏手柄。
-
OgleBox Android TV:这款设备主要在澳大利亚提供区域性内容。它于 2015 年 3 月宣布。
-
LG UPlus Android TV:韩国电信公司 LG UPlus 推出了一款 Android 电视,搭载 U+ tvG 4K UHD 和 U+ tvG Woofer IPTV 机顶盒。
-
Arcadyan BouygtelTV:2015 年 6 月,法国电信公司 Bouygues Telecom 宣布推出一款名为“Miami”的集成式基于 Android TV 的机顶盒。
除了这些基于机顶盒/游戏机的 Android 设备外,许多电视制造商也在瞄准推出 Android 电视。索尼、夏普、飞利浦、LG、三星等公司都在向 Android 迁移。飞利浦宣布他们未来 80%的电视型号将采用 Android(图片来源:www.techdigest.tv/wp-content/uploads/2014/07/kogan-smart-tv-may-2013.jpg
):
让我们来看一个示例智能电视的规格:
-
型号:VU 32K160M LED 电视
-
操作系统:Android v4.4 奇巧猫
-
处理器:2.0 GHz 八核 GPU,搭载 Amlogic 四核 S802 ARM Cortex 处理器 CPU
-
显示:32 英寸 LED 屏幕(1366x768 像素),采用消色技术和全色优化器,为图像、视频、游戏等提供世界级的观看体验
-
设计:该型号采用 A+级纯棱镜面板覆盖,使图片更加清晰和详细。而且它比普通智能电视型号更薄。其尺寸为 29 英寸 x 19 英寸 x 7 英寸,重量为 7.3 公斤。
-
RAM 和存储: Vu 32K160M 电视有 2 GB DDR3 RAM 和 8 GB NAND 闪存存储。
-
视频: 它可以播放 @60fps 的 1080p 视频,并支持各种文件格式。
-
连接: Vu 电视支持蓝牙 v4.0、Wi-Fi 和以太网。它让用户可以从电视屏幕上浏览他们喜爱的网站和查看邮件。它有三个 USB 端口和两个 HDMI 端口。
这个规格足够吸引游戏开发人员积极参与他/她的下一个游戏。
谷歌还发布了一个名为 ADT-1 的安卓电视开发套件。这个硬件开发套件是在谷歌 I/O 期间向应用程序开发人员提供的(图片来源:chezasite.com/media/2014-post-icon/adt-1-android-tv-reference-design-1920x1080.jpg
):
早期的谷歌电视设备因性能不佳的规格而受到批评。幸运的是,谷歌已经试图解决这个问题,因为他们以一些相当令人印象深刻的规格强势出击:
-
Tegra 4 芯片组
-
2 GB RAM
-
16 GB 内部存储
-
2×2 MIMO 双通道 Wi-Fi
-
蓝牙 4.0
-
以太网端口
-
HDMI 端口
-
安卓 L 开发者预览
安卓电视在开箱即用时已完全解锁,因此谷歌邀请开发人员为这个平台开发任何有助于它的东西。现在还为时过早来判断这种开放性会带来什么结果,但开发人员应该很快就会探索并为这个设备开发。
探索安卓游戏机
连接到电视的一个小型适配器和一个控制器设备,一起被称为游戏机套装。安卓是一个便宜、低成本的操作系统,可以轻松地在任何移动硬件平台上使用。
首款基于安卓的游戏机之一是 OUYA(图片来源:cdn2.pu.nl/media/misc/ouya_wall_ins.jpg
):
这些游戏机被称为微型游戏机。几年前,这类游戏机的规格是这样的:
-
型号: OUYA
-
处理器: ARM Cortex A9
-
速度: 1.7 GHz 四核
-
系统芯片: NVIDIA Tegra 3
-
闪存: 8 GB
-
RAM: 1 GB DDR3
-
显示: 高清(720p)或全高清(1080p)
-
图形处理器: NVIDIA GeForce ULP GPU
-
安卓版本: 安卓 4.1 果冻豆
-
连接: Wi-Fi、蓝牙和局域网
现在让我们来看一下现代安卓游戏机的规格:
-
型号: NVIDIA Shield
-
处理器: ARM Cortex A57 + A53(64 位)
-
速度: 1.9 GHz 四核 + 1000 MHz 四核
-
系统芯片: NVIDIA Tegra X1
-
闪存: 500 GB 硬盘
-
RAM: 3 GB
-
连接: Wi-Fi、蓝牙、局域网、USB 和 HDMI
-
显示: 支持 4K 分辨率
这是 NVIDIA Shield 安卓游戏机 (cdn0.vox-cdn.com/thumbor/72vPz7fqWT7ButeiG17cW_jjP2Y=/0x0:1920x1080/1600x900/cdn0.vox-cdn.com/uploads/chorus_image/image/45812214/shield-hero-image.0.0.jpg
)
现在让我们来看另一款现代安卓游戏机,名为 Razor Forge TV(图片来源:android.hu/img/2015/04/gallery-04.jpg
):
其规格如下:
-
型号: Razor Forge TV
-
处理器: 高通骁龙 805
-
速度: 2.5 GHz 四核
-
GPU: Adreno 420
-
闪存: 16 GB
-
RAM: 2 GB
-
连接: Wi-Fi、蓝牙、局域网、USB 和 HDMI
-
安卓版本: 5.0 棒棒糖
游戏机是专门用于游戏的设备。然而,如今,游戏机可以用于各种用途,但主要目标仍然是一样的。
从之前的规格示例中,我们可以了解到安卓游戏机的发展。开发者为游戏机工作在特定目标设备上。即使游戏是可携带的,游戏机的质量也必须得到保证。
在最近的市场研究中,有人说 PlayStation 4、Xbox One 和任天堂 Wii U 将成为硬核游戏机玩家的主要平台。然而,亚马逊、谷歌和其他公司推出的安卓游戏机预计将以更快的速度增长,并为休闲到中核心玩家提供了一个从沙发上玩游戏的经济实惠方式。很明显,随着时间的推移,更广泛的游戏机玩家群体可能会考虑安卓。
这开启了安卓游戏开发的新时代。游戏机游戏与典型的移动游戏不同,而大多数安卓游戏开发者都在其中。然而,随着自 2014 年以来安卓游戏机数量的增加,越来越多的开发者对此产生了兴趣。
除了之前讨论过的游戏机之外,还有一些其他的,比如以下的:
-
Game Stick:这是一个由安卓果冻豆驱动的小型插入式游戏机,具有 1GB DDR3 内存和 8GB 闪存。然而,这些规格正在被提升(图片来源:
cdn2.knowyourmobile.com/sites/knowyourmobilecom/files/styles/gallery_wide/public/5/05/gamestick-4.jpg?itok=kYGDnKgr
): -
Mad Catz MOJO:这是一款普通的微型游戏机,配备 2GB 内存、16GB 闪存和 Tegra 4 处理器。该设备运行在安卓 4.2.2 上(图片来源:
cc.cnetcontent.com/inlinecontent/mediaserver/3m/8f8/607/8f8607ed9d2b4cee981f651125046895/original.jpg
): -
GamePop:BlueStacks 公司制造了这款下一代安卓游戏机,旨在建立一个类似其他顶级游戏机的订阅模式。大多数安卓游戏机使用基于商店的内容。这无疑是一个伴随着巨大期望的新尝试。
这款游戏机引入的一个新功能是,该设备能够通过一个名为 Looking Glass 的可视化工具运行 iOS 游戏。在这个设备进入市场之前,过于兴奋地期待它的表现可能不太明智。但如果真的能实现,结果可能会令人惊讶。
安卓游戏机的发展可能是游戏的未来;然而,其他顶级游戏机的存在不会灭绝。用户群体每天都在增加,平台上的游戏数量也在增加。
作为安卓游戏开发者,一个人不应该局限于传统的游戏平台,比如智能手机和平板电脑。时代在迅速变化。开发者应该保持自己的更新。
探索安卓手表
在智能技术时代,人们预期每种可能的小工具都能更智能地工作。手表也不例外。手表的类型从模拟变成了数字,现在又变成了纯粹的计算机智能手表。作为一个非常灵活的开源操作系统,安卓是智能手表最受欢迎的选择之一(图片来源:photos.appleinsidercdn.com/bigger-wimm-130830.jpg
):
从早期版本开始,安卓手表就有能力玩游戏,因此进入了游戏开发领域。先进的设备和小型计算机一样出色。它们包括互联网、传感器、摄像头、蓝牙、Wi-Fi、扬声器、卡槽等许多功能。
与其他计算机一样,智能手表可以从内部或外部传感器收集信息。它可以控制或从其他仪器或计算机中检索数据。它可以支持蓝牙、Wi-Fi 和 GPS 等无线技术。然而,"手表电脑"也可能只是作为远程系统的前端,就像使用蜂窝技术或 Wi-Fi 的手表一样。
Android Wear 于 2014 年 3 月 18 日首次由谷歌宣布。与此同时,许多电子设备制造商也宣布成为 Android Wear 的合作伙伴。这些公司包括三星、摩托罗拉、LG、HTC、华硕等。
2014 年 12 月,操作系统升级到 Android 5.0(棒棒糖)。我们可以看到在这个时期周围有一系列的 Android 手表发布。LG 开始发货 LG G Watch,摩托罗拉宣布 Moto 360,华硕发布了 ZenWatch。
最新的智能手表提供了一系列吸引人的功能。用户可以通过手机语音获取方向,选择包括自行车在内的交通方式,并开始旅程。在旅行时,手表会显示方向,并实际上使用触觉交互来指示转弯,帮助佩戴者在不看手机甚至手表屏幕的情况下旅行。用户可以使用他们的 Android Wear 手表来控制手机。可以请求音乐(例如,“OK Google,播放滚石乐队”)。屏幕上会显示一个播放控制卡,包括音量、跳过和媒体图像,音乐可以从手腕上控制,用户可以自由移动。
让我们来看一下 Android 可穿戴设备的一些规格。首先是 LG G Watch:
处理器 | 高通骁龙 400 |
---|---|
闪存 | 4 GB |
RAM | 512 MB |
电池 | 400 毫安时 |
连接性 | 蓝牙 4.0 |
传感器 | 陀螺仪、加速度计、指南针 |
Android 版本 | 4.3 |
显示 | 1.6 英寸 |
分辨率 | 280x280 |
这种配置在市场上已经不复存在了,但用户还在。因此,在为 Android 可穿戴设备开发游戏时,开发者也应该考虑这些配置。
Android 可穿戴设备制造商也在大规模升级他们的设备硬件。现在让我们通过比较两个版本来看一下设备的演变:
索尼智能手表 2 | 索尼智能手表 3 | |
---|---|---|
处理器 | ARM Cortex M4 | ARM A7 四核 |
速度 | 180 MHz | 1.2 GHz |
闪存 | 256 MB | 4 GB |
RAM | 64 MB | 512 MB |
电池 | 225 毫安时 | 420 毫安时 |
连接性 | 蓝牙 3.0 | 蓝牙 4.0 和 Wi-Fi 准备 |
传感器 | 陀螺仪、加速度计、指南针、接近、环境光和 IP57 防尘防水 | 陀螺仪、加速度计、指南针、接近、环境光和 IP68 防尘防水 |
Android 版本 | 4.0 | 4.3+ |
显示 | 1.6 英寸 | 1.6 英寸 |
分辨率 | 220x176 | 320x320 |
我们可以看到在技术和硬件升级方面的巨大提升。这就是市场的增长,也是应用程序的增长。
对 Android 手机的开发见解
正如我们之前讨论过的,对于 Android 平台上的任何游戏开发者来说,主要的开发目标是 Android 手机。我们也注意到了 Android 手机的各种技术规格。当游戏开发者将目标最大化地放在这个平台上时,他们必须注意设备类别。
大多数 Android 设备都支持常见的触摸界面、物理 Home 按钮、物理锁定按钮、返回按钮以及音量上下键进行用户交互。除此之外,加速度计也可以是用户界面的一个良好媒介。
游戏大多是视觉化的,因此游戏开发者应该始终关注设备的图形性能。最新的 Android 手机中有一个独立的图形处理器,但质量有所不同。
视觉卓越不仅仅取决于 GPU,显示屏质量也非常重要。低 PPI 屏幕无法提供高质量的显示。第一代 Android G1 手机的屏幕分辨率为 240x320,属于 LDPI 分辨率类别。因此,无论开发者如何努力,游戏的视觉质量都无法达到卓越。幸运的是,随着时间的推移,设备制造商在提高视觉质量和性能方面付出了很多努力。但这一特性是以电池寿命为代价的。它获得的质量越高,消耗的电池就越多。
以前,很少有 Android 手机(例如 Android HTC Dream G1)有物理 QWERTY 键盘。这使得从 Symbian 或 BlackBerry 移植游戏控制系统到 Android 变得更容易(图片来源:s.androidinsider.ru/2015/02/htc-dream.@750.jpg
):
如今,Android 游戏的控制系统完全改变了,以适应市场上其他智能手机游戏的控制风格。
在当前情况下,移动电池的平均容量约为 2750 毫安。一些制造商通过降低显示质量来提供更高的电池容量。由于移动设备的物理尺寸和重量限制,不可能将电池容量增加到一定限度以上。
以最大化设备为目标总是一个好主意,只要在性能和游戏体验之间保持平衡。
设备市场对各种设备都是开放的。虽然旧配置不再生产,但这些设备还没有过时。这就是为什么开发者对他们的游戏有最低要求。
智能手机是任何游戏开发组织的主要目标。用户群不断增加,Android 的升级帮助这个平台更快地增长。曾经有一段时间,人们认为 BlackBerry 是唯一的智能手机。但当前市场表明,时代已经改变,开发者也改变了。
对于 Android 手机游戏开发,开发者应该牢记以下限制和特点:
-
小的显示区域
-
广泛的分辨率和像素密度
-
全屏多点触控界面
-
陀螺仪、加速计、指南针、环境光等传感器支持
-
广泛的 RAM
-
各种处理器和性能
-
电池寿命
-
更多的中断机会
Android 手机现在是更有利可图的平台之一。在市场份额方面,没有其他移动操作系统能与 Android 竞争。因此,开发者总是投身于 Android。这个平台成功的一些经济原因如下:
-
拥有庞大的用户群,吸引广告商作为广告平台
-
通过成熟的商店进行简单的货币交易
-
轻松进行游戏和应用的跨推广
Android 平板的开发见解
Android 游戏开发在 Android 平板出现之前主要局限于智能手机。在平板上玩游戏更有趣。平板游戏因以下原因在短时间内变得流行起来:
-
更大的屏幕:尽管分辨率相同的更大屏幕会影响视觉质量,但它提供了更大的可见性。更大的可见性增强了艺术资产以展现其细节,这对于小屏幕智能手机来说并不总是可能的。
-
更大的物理尺寸:更大的物理尺寸迫使玩家用双手玩游戏,这样可以更好地控制设备和控制。
-
更大的空间/可玩区域:更大的可玩区域可以提供更多的控制空间。这意味着玩家在使用触摸控制系统时不需要那么准确,因此可以更专注于游戏本身。因此,它增强了游戏体验。
-
少限制:持续玩游戏会严重消耗电池。在手机的情况下,主要目标是保持与网络的连接。因此,保持设备活跃非常重要。但平板没有特定的目标。它是一个多用途的实用设备。其中一个目的可以是玩游戏。因此,除了游戏之外,没有必要为其他工作节省电源。
-
少打扰:我们都知道在进行中的工作中任何打扰都会很烦人。游戏体验也是如此。任何打扰都会导致游戏的主要暂停,大多数时候,玩家会在那个时候退出。在平板上,自动打扰的机会比手动或物理打扰要少;这意味着在平板上玩游戏时会少一些烦恼。
对于安卓平板游戏开发,开发者应该牢记以下限制和特点:
-
大屏幕显示区域
-
广泛的分辨率范围,相对较低的像素密度
-
全屏多点触控界面
-
传感器支持陀螺仪、加速计、指南针、环境光等
-
广泛的 RAM
-
广泛的处理器和性能
-
打扰的机会较少
平板电脑起源于一个小型便携计算设备的概念,可以成为智能手机和个人电脑/笔记本电脑之间的桥梁。
更大的屏幕总是帮助用户更轻松地与游戏互动。游戏设计师有更多的空间可以利用。然而,这稍微增加了开发者的头疼,因为视觉质量必须在相同的硬件限制内保持不变。
以前,大多数平板使用移动处理器,但现在平板制造商正在使用笔记本处理器。英特尔酷睿就是一个例子。设备中使用的处理器能力越强,它能提供的质量就越好。
曾经有一段时间,安卓游戏首先面向手机,然后再移植到平板上。但现在情况已经改变。现在智能手机游戏的开发和平板游戏之间的界限非常微弱。大多数情况下,同一个 APK 可以支持手机和平板,几乎具有相同的质量和性能。不再专门为平板移植。
关于安卓电视和机顶盒的开发见解
首先,安卓电视游戏开发需要专注于两个特定的事情:
-
大型共享显示屏
-
横向分辨率较低的 dpi
对于玩家来说,大屏幕总是一个加分项,但这增加了图形设计师根据硬件限制进行优化的工作量。同时,显示屏可以与多个用户共享,因此开发者必须确保所有用户的操作始终可以与显示屏同步。
与其他安卓设备相比,电视屏幕要大得多。从 5 英寸到 50 英寸再到 150 英寸的屏幕可以暴露出图形质量差的问题。因此,在开发安卓电视游戏时需要考虑以下几点:
-
检查游戏的纹理——在安卓电视上拉伸时,低分辨率纹理通常看起来很差
-
在电视上,3D 模型可能会有锯齿状的曲线,因为多边形太少
-
如果发射器、图案或颜色太少,粒子效果可能需要重新调整以适应电视的大屏幕
-
在小屏幕的安卓设备上通常不需要抗锯齿,但对于电视来说,它会对视觉产生明显的影响。
现在下一个挑战是输入控制系统。游戏可以有多个控制器。电视可以直接由其他安卓设备或遥控器控制。
然而,任何安卓游戏机或机顶盒也可以使用。在这种情况下,游戏控制器或 D-pad 控制对游戏更有用。
要使用控制器或 D-pad,游戏开发人员应该非常具体地使用适当的控制按钮来实现每个功能。当多个玩家一起玩游戏时,每个人都有自己的控制器,重要的是要映射每个玩家-控制器对。
在AndroidManifest.xml
文件的application
标签下指定游戏是一个可选的优势,如下所示:
<application
<!-- other declarations and tags -->
android:isGame="true"
<!-- other declarations and tags -->
>
这将有助于将游戏与其他常规应用程序区分开,并将其显示在 Android TV 主页的游戏类别下。
根据要求,还可以进行其他声明。
要声明对游戏控制器的支持,请使用以下代码:
< uses-feature android:name="android.hardware.gamepad" android:required="true"/>
开发人员必须在AndroidManifest.xml
文件中包含“touchscreen required false”声明,因为 Play Store 用于过滤。如果缺少这一声明,Play Store 在搜索结果中不会向 Android TV 用户显示应用程序:
< uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
对于所有 Android TV 游戏开发人员来说,指定 Android 的非必需功能以摆脱额外的库麻烦是非常好的做法。例如,电视没有加速计或重力传感器,因此将它们标记为非必需是一个很好的开发实践。可以按照以下方式进行:
<manifest ...>
<application ...>
...
<!-- Requiring the camera removes this listing from Android TV search results -->
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<!-- Making accelerometer optional has no impact on Android TV filtering -->
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false" />
</application>
</manifest>
UI 和游戏设计
每个游戏 UI 都必须遵循支持控制方案的设计,也就是说,UI 必须完全支持输入控制器和元素,并且屏幕必须相应地进行设计。这是移动/平板游戏开发和 Android TV 游戏开发之间的主要区别。
由于我们正在讨论 Android TV 上的开发,开发人员必须考虑在离沙发或豆袋 4-10 英尺的距离上玩 Android TV 游戏的感觉。以下是开发人员应该查找的检查清单:
-
所有文本都应该清晰可读
-
UI 按钮和其他元素应该与整体布局相匹配,而不会影响整个屏幕的可读性和可见性
-
在玩游戏时,控制器必须控制所有可能的任务,因为没有人愿意经常起来控制电视
过扫描
与手机和平板电脑屏幕不同,电视屏幕可能会在屏幕边缘失去一些空间以进行过扫描。尽管现在许多电视使用固定像素技术如 LCD,但许多品牌仍然会失去边缘细节。请确保在电视屏幕的外部留出一个区域,不要放置重要的 UI 和游戏元素。一个很好的经验法则是在完全空白的空间周围留出 5-10%的边距,并在绘制重要元素之前留出 10-20%的边距。
如果开发人员在其 UI 中使用标准的 Android 组件,则可以使用 Android Jelly Bean 中提供的内置过扫描支持。如果 UI 是自定义的 OpenGL 或 OpenGL ES 代码,或者使用游戏引擎的 UI 系统,则开发人员必须在 Android TV 界面设计中考虑过扫描。
Android 游戏机的开发见解
今天的现代移动设备完全有能力运行质量适中的游戏,处理能力有限,可与 PC 和游戏机相媲美。预计到 2015-2016 年,移动游戏的收入将超过游戏机和 PC。现在的问题是,“游戏机市场会生存下去吗?”答案是是。
游戏机专门设计和配置,以提供最佳的游戏体验,而智能手机则设计用于更好的通信和网络连接,计算能力有限。作为游戏机操作系统的 Android 已经被证明是成功的。
Android 手机和 Android 游戏机的配置几乎没有太大区别。处理器、内存容量和其他一些变化可以看到,但最重要的区别是输入系统。手机、平板电脑、可穿戴设备都有触摸界面,而游戏机使用典型的游戏控制器。
从开发的角度来看,Android 游戏机位于手机和 PC 之间。因此,除了设计外,控制和硬件的使用是主要的两个参数。
我们已经讨论了市场上可用的各种类型的游戏机。作为开发平台,它并没有太多的独特性。
Android 手表开发见解
可穿戴游戏直接在可穿戴设备上运行,使开发人员可以访问低级硬件,如传感器、活动、服务等,直接在可穿戴设备上。当开发人员想要发布到 Google Play 商店时,还需要一个包含可穿戴应用程序的手持游戏。可穿戴设备不支持 Google Play 商店,因此用户下载手持游戏,该游戏会自动将可穿戴游戏推送到可穿戴设备上。手持游戏还可用于进行大量处理、网络操作或其他工作,并将结果发送到可穿戴设备。
要在 Android 可穿戴设备上开发游戏,需要遵循一些技术步骤。这不是一般的 Android 游戏开发:
-
Android SDK 工具必须更新到 23.0 或更高版本
-
SDK 中的 Android 平台支持必须更新到 Android 4.4.2 (API 20)或更高版本
-
开发需要一个 Android 可穿戴设备或模拟器
创建和设置可穿戴应用程序
可以按以下步骤完成:
在 Android Studio 中选择新项目。在配置项目窗口中,输入应用程序名称和包名称。在表单因素窗口中,执行以下步骤:
-
选择手机和平板电脑,在最低 SDK下选择API 9: Android 2.3 (姜饼)。
-
选择Wear,在最低 SDK下选择API 20: Android 4.4 (KitKat Wear)。
-
在第一个添加活动窗口中,为
mobile
添加一个空白活动。 -
在第二个添加活动窗口中,为
wear
添加一个空白活动。
当向导完成时,Android Studio 将创建一个包含两个模块mobile
和wear
的新项目。开发人员现在有了一个用于手持设备和可穿戴设备应用程序的项目,可以在其中创建活动、服务和自定义布局。手持设备应用程序完成大部分繁重的工作,如网络通信、密集处理或需要长时间用户交互的任务。当应用程序完成这些操作时,应用程序应通过通知或将数据同步和发送到可穿戴设备来通知可穿戴设备的结果。
注意
wear
模块还包含一个使用WatchViewStub
的Hello World
活动。这个类根据设备的屏幕是圆形还是方形来填充布局。WatchViewStub
类是可穿戴支持库提供的 UI 小部件之一。
在项目中包含正确的库
Android 应用/游戏有很多库支持。每个开发人员都需要确定他们的正确需求,以包含正确的库。
以下是一些在可穿戴设备上进行游戏开发的有用库的列表:
-
通知:Android v4 支持库(或 v13,包括 v4)包含了扩展手持设备现有通知以支持可穿戴设备的 API。对于仅出现在可穿戴设备上的通知(即由在可穿戴设备上运行的应用发出的通知),开发人员可以在可穿戴设备上使用标准框架 API(API 级别 20),并在游戏或应用程序的
mobile
模块中删除支持库依赖。 -
可穿戴数据层:要使用可穿戴数据层 API 在可穿戴设备和手持设备之间同步和发送数据,开发人员需要最新版本的 Google Play 服务。如果开发人员不使用这些 API,从两个模块中删除依赖关系。
-
可穿戴 UI 支持库:这是一个非官方库,包括为可穿戴设备设计的 UI 小部件。安卓平台鼓励开发者在应用程序中使用它们,因为它们体现了最佳实践,但它们随时可能会发生变化。但是,如果库被更新,应用程序不会崩溃,因为它们被编译到项目中。要从更新的库中获得新功能,开发者只需静态链接新版本,并相应地更新应用程序。这个库只适用于开发者创建可穿戴应用程序。
与安卓版本的硬件兼容性问题
现在让我们再次看一下绝对最低的硬件要求,因为我们已经知道安卓不兼容 ARM v4 处理器,而安卓 4.0+需要 ARM v7 或更高版本。安卓可穿戴设备运行在安卓 4.4 或更高版本。因此,开发者必须支持从 ARM v7 开始。
平台特定特性
到目前为止,我们已经讨论了所有安卓硬件平台。每个平台在配置、大小、形状、实用性和功能方面都有自己的特点。
现在让我们总结一下在开发相同游戏时应考虑的特定平台要点。
安卓手机
这种类型的安卓硬件平台是全球最著名和广泛使用的设备。典型的安卓手机特定功能包括:
-
小屏幕
-
高 dpi 显示
-
广泛的硬件配置范围
-
全触摸屏
-
最大传感器支持
-
多用途
-
最大用户群
安卓平板电脑
这种类型的安卓硬件平台是全球第二大最著名和广泛使用的设备,具有略微不同的实用功能。典型的安卓平板电脑特定功能包括:
-
相对较大的屏幕
-
低 dpi 显示
-
全触摸屏
-
特定用途设备
安卓电视和机顶盒
这种类型的安卓硬件平台正在迅速传播,作为比普通电视更受欢迎的智能电视,具有更多功能和能力。典型的安卓电视和机顶盒特定功能包括:
-
最大的显示单元
-
无触摸界面
-
D-pad 或基于控制器的输入系统
-
固定的横向方向
-
有限的硬件支持
-
适合多人游戏
安卓游戏机
除了著名的游戏机如 PS3、PS4 和 Xbox 之外,安卓游戏机如今也越来越受欢迎。典型的安卓游戏机特定功能包括:
-
专用的硬件系统用于游戏
-
全控制器输入系统
-
多分辨率大屏幕支持
-
硬件特定开发
-
最佳的安卓平台,提供多人游戏体验
安卓手表
这是安卓上最常用的可穿戴平台。该设备的主要特点是提供健康信息。然而,游戏也在这个设备上流行起来。典型的安卓手表特定功能包括:
-
非常小的显示屏
-
有限的硬件支持
-
较少的内存和处理能力
-
触摸屏界面
-
非常便携
-
需要单独的可穿戴设备开发环境
总结
在开始开发之前,开发者必须清楚了解硬件和软件规格。在本章中,您已经了解了安卓上可能运行的不同硬件平台。通过这些知识,作为开发者,您可以轻松地确定您的目标受众。选择特定的一组硬件平台作为目标要容易得多。
在不久的将来,安卓将会进入虚拟现实世界,采用不同的技术。我们将在本书的后面讨论这些。到目前为止,您已经知道手机、平板电脑、电视、机顶盒、游戏机和手表是各种硬件平台。它们都能够运行安卓游戏。然而,安卓游戏机是唯一专用于游戏的硬件平台。
尽管游戏机是专门的游戏平台,但安卓手机和安卓平板是开发者最瞄准的平台。它们提供了运行几乎所有类型游戏所需的所有支持和设施。这些平台还有用户数量的额外优势。大多数开发者都瞄准这些平台,以获取尽可能多的用户。
第三章:不同的 Android 开发工具
我们已经讨论了游戏开发的不同 Android 目标设备。在本章中,我们将看看为 Android 开发游戏的不同方法和工具。除了开发技能和知识外,了解可以使开发过程更轻松和有效的有用软件非常重要。
Android 游戏开发得到许多强大的工具和库的支持。让我们来看看开发过程中必备的工具列表:
-
Android SDK
-
Android 开发工具
-
Android 虚拟设备
-
Android 调试桥
-
达尔维克调试监视服务器
这些是 Android 游戏开发人员系统中必须安装的必备工具。没有这些工具,就无法为 Android 平台开发任何东西。尽管 ADB 和 AVD 对于开发来说并不是必需的,但它们需要用于在物理设备和虚拟设备上测试和部署游戏,以便调试游戏。
Android SDK
Android SDK 是构建 Android 应用程序所需的主要开发工具包。不详细介绍,可以说 SDK 是任何 Android 开发的骨架。这个 SDK 本身带有数十个支持工具。它包含平台细节、API 和库,以及 ADT 和 AVD。因此,将 Android SDK 集成到系统中提供了开发人员所需的所有必要工具。始终使用最新平台和其他工具更新 SDK 是一个非常好的做法。
升级可以通过 Android SDK 管理器进行。但是,平台选择是手动的,建议根据需求仅安装必要的平台。另一个最佳实践是将最新发布的平台与 Android 的最低目标版本一起使用(图片来源:photos4.meetupstatic.com/photos/event/1/1/0/f/highres_441724367.jpeg
):
Android 开发工具
Android 开发工具(ADT)是专为 Eclipse IDE 设计的插件,旨在为构建 Android 应用程序提供强大的集成环境。
ADT 扩展了 Eclipse 的功能,使开发人员能够快速设置新的 Android 项目,创建应用程序 UI,根据 Android 框架 API 添加包,使用 Android SDK 工具调试应用程序,甚至导出签名(或未签名).apk
文件以分发应用程序。
在 Eclipse 中使用 ADT 进行开发是非常推荐的,也是最快速的入门方式。通过提供的引导式项目设置以及工具集成、自定义 XML 编辑器和调试输出窗格,ADT 极大地提高了开发 Android 应用程序的速度。
然而,谷歌正在取消对 Eclipse 的 ADT 支持,因此建议开发人员切换到 Android Studio。
Android 虚拟设备
Android 虚拟设备(AVD)是真实设备的软件生成模型,可以配置自定义硬件规格。它也可以是真实设备的虚拟副本。这是任何 Android 开发人员最重要的工具之一。这使开发人员能够在典型的 Android 环境中测试应用程序,而无需使用实际的硬件设备,以缩短开发时间(图片来源:www.geeknaut.com/images/2014/08/top-android-emulators-for-windows3.png
):
配置 AVD
AVD 包括以下内容:
-
硬件配置文件:该配置文件描述虚拟设备的硬件特性。可以配置硬件选项,如 QWERTY 键盘、摄像头、集成内存等。
-
系统镜像映射:可以根据已安装的 Android 平台集合配置正在运行的 Android 平台版本。Android 平台可以通过 Android SDK 管理器安装。
-
专用磁盘空间:可以使用此功能在开发机上设置专用存储区域,用于保存模拟器的用户数据和虚拟 SD 卡。
-
其他功能:开发人员甚至可以指定虚拟设备的外观和感觉,如设备外壳、屏幕尺寸和外观。
以下是通过 AVD 管理器创建 AVD 的简要过程,该管理器位于 <SDK 路径>/tools
目录中:
-
在主屏幕上,点击创建虚拟设备。
-
在选择硬件窗口中,选择设备配置,如Nexus 5,然后点击下一步,然后点击完成。
-
要通过使用现有设备配置文件作为模板开始自定义设备,请选择设备配置文件,然后点击克隆设备。或者,要创建完整的自定义模拟器,请点击新硬件配置文件。
-
设置以下内容以创建新的自定义模拟器:
-
设备名称
-
屏幕尺寸
-
屏幕分辨率
-
RAM
-
输入选项
-
支持的状态
-
摄像头选项
-
传感器选项
- 设置完每个属性后,点击完成。
开发人员还可以使用命令行创建新的自定义模拟器,如下所示:
android create avd -n <name> -t <targetID> [-<option> <value>] ...
在这里,可以设置以下选项:
-
name
:这将是自定义 AVD 名称 -
targetID
:这将是自定义 ID -
option
:这可以包括设备屏幕密度、分辨率、摄像头等选项。
开发人员可以执行此命令来使用先前定义的 AVD:
android list targets
然后,开发人员可以运行以下命令:
emulator –avd <avd_name> [options]
Android 调试桥
Android 调试桥(adb)是用于在开发环境和虚拟设备或连接的 Android 设备之间建立通信的工具。它是一个客户端-服务器命令行程序,由三个元素组成:
-
开发机上的客户端:作为客户端工作,可以通过 adb 命令调用。其他 Android 工具,如 ADT 插件和 DDMS,也会创建 adb 客户端。
-
守护进程:在每个模拟器或设备实例上后台运行的后台进程。
-
开发机上的服务器:这是在开发机上运行的后台进程,负责管理客户端和服务器之间的通信。
启动 adb 时,客户端首先检查是否已经运行了 adb 服务器进程。如果没有,它会启动服务器进程。服务器启动后,它会绑定到本地 TCP 端口 5037
,并监听从 adb 客户端发送的命令——所有 adb 客户端都使用端口 5037
与 adb 服务器通信。
服务器然后建立到所有运行的模拟器/设备实例的连接。它通过扫描范围为 5555
到 5585
的奇数端口来定位模拟器/设备实例,这是模拟器/设备使用的范围。服务器在找到 adb 守护程序时,会建立到该端口的连接。请注意,每个模拟器/设备实例都会获取一对连续端口——用于控制台连接的偶数端口和用于 adb 连接的奇数端口。
一旦服务器建立了到所有模拟器实例的连接,开发人员就可以使用 adb 命令访问这些实例。由于服务器管理着对模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,开发人员可以从任何客户端(或脚本)控制任何模拟器/设备实例。
在 Android 设备上使用 adb
要记住的第一件事之一是将开发设备置于 USB 调试模式。这可以通过转到设置,点击开发人员选项,并为 Android 5.0 及以上版本勾选名为USB 调试的复选框来完成(对于其他 Android 版本,请参考www.recovery-android.com/enable-usb-debugging-on-android.html
)。如果不这样做,开发 PC 将无法识别设备。
最重要的是知道如何通过命令行进入 adb 文件夹。这可以通过cd
(更改目录)命令完成。因此,如果(在 Windows 上)SDK 文件夹称为android-SDK
,并且位于根目录(c:
)中,您可以输入以下命令:
cd c:/android-SDK
然后,要进入 adb 文件夹,请使用以下命令:
cd platform-tools
此时,提示会显示如下内容:
C:\android-SDK\platform-tools>
现在开发人员可以连接设备,并测试 adb 连接,在找到并安装特定设备的驱动程序之后:
adb devices
如果一切设置正确,应该会列出已连接的设备。手机或平板电脑将被分配一个编号,因此如果它不说“Droid Razr”或“Galaxy Nexus”,也不要感到惊讶。
对于普通用户,adb 更多地是用于基本黑客任务的工具,而不是任务本身。除非开发人员知道自己在做什么,他们可能不应该在没有明确指示的情况下过多地探索。在对设备进行 root 时,了解这些基础知识可以帮助节省一些时间,并让开发人员提前做好准备。
除了特定设备的 root 指令之外,开发人员需要的下一步是手机或平板电脑的驱动程序。
通常,最简单的方法是简单地通过谷歌搜索特定设备加驱动程序。因此,如果开发人员有一个 Droid Razr,他/她应该搜索Droid Razr Windows Drivers
。这几乎总是会将开发人员引向最佳链接。
另一个选项,仅适用于原生 Android 设备的是从 SDK 下载 USB 驱动程序。要做到这一点,再次启动 SDK 管理器。转到左侧的可用软件包选项卡,展开第三方附加组件条目,然后展开Google Inc.附加组件条目。最后,勾选Google USB 驱动程序软件包的条目。
请注意,USB 驱动程序包与 OS X 不兼容。
Dalvik 调试监视服务器
Dalvik 调试监视服务器(DDMS),无论是通过独立应用程序还是具有相同名称的 Eclipse 透视图访问,都提供了方便的功能,用于检查、调试和与模拟器和设备实例交互。您可以使用 DDMS 来检查运行中的进程和线程,浏览文件系统,收集堆和其他内存信息,附加调试器,甚至拍摄屏幕截图。对于模拟器,您还可以模拟模拟位置数据,发送短信和发起来电:
如前面的屏幕截图所示,DDMS 主要可以跟踪、更新和显示以下信息:
-
所有运行中的进程
-
每个进程的所有运行线程
-
每个进程的已用堆
-
所有日志消息
在 Android 上,每个应用程序都在自己的进程中运行,每个进程都在自己的虚拟机中运行。调试器可以连接到 VM 的公开端口。DDMS 在启动时连接到 adb。成功连接后,在 adb 和 DDMS 之间创建了一个 VM 监视服务,该服务在设备上启动和结束 VM 时通知 DDMS。DDMS 通过 adb 检索 VM 的进程 ID,并在通过设备上的 adb 守护程序运行的活动 VM 时,打开到 VM 的调试器的连接。DDMS 现在可以使用自定义的线路协议与 VM 通信。
DDMS 还监听默认调试端口,称为基本端口。基本端口是一个端口转发器,可以接受来自任何调试端口的 VM 流量并将其转发到调试器。转发的流量由 DDMS 设备视图中当前选择的进程确定。
其他工具
前面部分提到的元素是 Android 开发的最低要求,可以使用它们创建完整的应用程序。但是,借助其他一些工具的支持,开发过程可以变得更加容易。让我们看看一些这样的工具。这些工具对于 Android 开发并非强制使用,但建议使用以获得更好的开发过程。
Eclipse
尽管 Eclipse 不是唯一可用于开发 Android 应用程序的 Java 开发环境,但它是迄今为止最受欢迎的。这在一定程度上是由于其成本(免费!),但主要是由于 Android 工具与 Eclipse 的强大集成。这种集成是通过 Eclipse 的 ADT 插件实现的,可以从 Android 网站下载。
对于许多开发人员来说,使用 Eclipse 进行 Android 开发是一个众所周知的做法。其中一些原因如下:
-
免费的 Eclipse IDE
-
直接的 Android 插件支持
-
直接的 DDMS 支持
-
简单的界面
-
Android NDK 支持
Android Studio 的推出降低了 Eclipse 在 Android 开发人员中的流行度,因为 Android Studio 具有内置的支持任何 Android 开发所需的一切。此外,在设计视图中使用起来更加简化。谷歌本身正在大力推广这个新工具。
Eclipse Android 开发存在一些缺点,因为它使用 Android SDK 作为第三方工具。主要缺点如下:
-
通过 Eclipse 进行调试有时很困难
-
ADB 配置很棘手
-
Android 清单必须手动管理
-
通过 Eclipse IDE 进行设计视图非常复杂
Eclipse 是一个出色的独立 IDE,但在 Android 开发方面,Android Studio 赢得了比赛。
层次结构查看器
层次结构查看器,无论是通过独立应用程序还是相对较新的 Eclipse 透视图访问,都用于查看布局和屏幕在运行时的解析方式。
它提供了应用程序布局和视图层次结构的图形表示,并可用于诊断布局问题(图片来源:media-mediatemple.netdna-ssl.com/wp-content/uploads/2012/03/da_hierarchy_viewer.png
):
Draw 9-Patch
在图形设计方面,Draw 9-patch 工具非常有用。该工具允许您将传统的 PNG 图形文件转换为可伸缩的图形,对于移动开发使用更加灵活和高效。该工具简化了在即时显示结果的环境中创建 NinePatch 文件的过程:
ProGuard
ProGuard 与 Android 开发没有直接关联,但它有助于保护开发者的知识产权。对于 Android 游戏开发人员来说,使用 ProGuard 是一种非常常见的做法。
ProGuard 基本上将成员和方法包装成不可读的代码结构。该工具可以配置为混淆生成的二进制文件。ProGuard 还有助于优化二进制文件,从而减小整体包大小。
当开发人员尝试将预编译的 JAR 文件集成到 Android 项目中时,ProGuard 可能很难使用。如果 JAR 已经通过 ProGuard 进行了优化,类结构可能会产生冲突。在这种情况下,必须配置 ProGuard 以排除预编译的 JAR,以实现成功构建。
始终建议使用 ProGuard 来保护游戏类免受逆向工程或反编译。
资产优化工具
我们都知道 Android 硬件配置的广泛范围。始终有必要优化资产以减少运行时内存使用和不必要的数据处理。在游戏中,图形资产占据了大部分存储空间和内存。
完整的资产优化
未经优化的资产可能包含一些不必要的数据,例如不透明资产中的透明信息,EXIF 数据,未使用的颜色信息,额外的位深度等。
资产优化工具有助于摆脱这一负担。但是,使用此类工具可能会使资产质量下降。开发人员在使用这些工具时应非常谨慎。
例如,如果一个资产应该是 24 位的,但是使用了 8 位优化工具进行了优化,它肯定会失去其视觉质量。因此,不建议对任何游戏进行过度优化,开发人员有责任使用适当的优化技术来维护游戏质量。
以下是一些此类资产优化工具:
-
PNGOUT
-
TinyPNG
-
RIOT
-
JPEGmini
-
PNGGauntlet
借助这些工具,艺术资源的大小可以优化到 80-90%。但许多开发人员不喜欢定期使用它们,原因如下:
-
开发人员不会单独优化每个资产,这导致了一些资产的质量损失。
-
选择正确的优化工具真的很困难。有时,相同的工作可能需要多个工具,这会减慢整体开发过程。
创建精灵
在许多情况下,人们注意到游戏中使用了大量小型艺术资源。这可能导致游戏的性能严重滞后。建议使用精灵构建工具将这些资源合并到一个资源中,以节省空间和时间。SpriteBuilder 和 TexturePacker 是此类工具的两个很好的例子。
测试工具
对于任何开发过程,测试都非常重要。对于 Android 游戏开发,也有一些工具和流程可以使测试变得更容易。
创建测试用例
活动测试以结构化方式编写。确保将测试放在与受测试代码不同的包中。按照惯例,您的测试包名称应该与应用程序包名称相同,后缀为.tests
。在您创建的测试包中,添加您的测试用例的 Java 类。按照惯例,您的测试用例名称也应该与您想要测试的 Java 或 Android 类的名称相同,但后缀为Test
。
要在 Eclipse 中创建新的测试用例,请执行以下步骤:
-
在包资源管理器中,右键单击您的测试项目的
/src
目录,然后选择新建 | 包。 -
将名称字段设置为
<package_name>.tests
(例如com.example.android.testingfun.tests
),然后单击完成。 -
右键单击您创建的测试包,并选择新建 | 类。
-
将名称字段设置为
<activity_name>Test
(例如MyFirstTestActivityTest
),然后单击完成。
设置测试装置
测试装置由必须初始化以运行一个或多个测试的对象组成。要设置测试装置,您可以重写测试中的setUp()
和tearDown()
方法。测试运行器在运行任何其他测试方法之前自动运行setUp()
,并在每个测试方法执行结束时运行tearDown()
。您可以使用这些方法将测试初始化和清理的代码与测试方法分开。
要在 Eclipse 中设置测试装置,请按照下面列出的步骤进行操作:
- 在包资源管理器中,双击您之前创建的测试用例,以打开 Eclipse Java 编辑器,然后修改您的测试用例类以扩展
ActivityTestCase
的子类之一。例如:
public class MyFirstTestActivityTest extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {
- 接下来,向您的测试用例添加构造函数和
setUp()
方法,并为您想要测试的活动添加变量声明。例如:
public class MyFirstTestActivityTest
extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {
private MyFirstTestActivity mFirstTestActivity;
private TextView mFirstTestText;
public MyFirstTestActivityTest() {
super(MyFirstTestActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mFirstTestActivity = getActivity();
mFirstTestText =
(TextView) mFirstTestActivity
.findViewById(R.id.my_first_test_text_view);
}
}
构造函数由测试运行器调用以实例化测试类,而setUp()
方法在测试运行器运行测试类中的任何测试之前由测试运行器调用。
通常,在setUp()
方法中,您应该调用setUp()
的超类构造函数,这是 JUnit 所要求的。
您可以通过以下方式初始化测试装置状态:
-
定义存储装置状态的实例变量。
-
创建并存储对要测试的活动实例的引用。
-
获取要测试的活动中的任何 UI 组件的引用。
开发人员可以使用getActivity()
方法获取对要测试的活动的引用。
添加测试前提条件
作为一种合理检查,验证测试装置是否已正确设置,并且您要测试的对象是否已正确实例化或初始化是一个好习惯。这样,您就不必因为测试装置的设置有问题而看到测试失败。按照惯例,用于验证测试装置的方法称为testPreconditions()
。
例如,您可能希望向您的测试用例添加一个类似于以下内容的testPreconditions()
方法:
public void testPreconditions() {
assertNotNull("mFirstTestActivity is null", mFirstTestActivity);
assertNotNull("mFirstTestText is null", mFirstTestText);
}
断言方法来自 Junit 的Assert
类。通常,您可以使用断言来验证您要测试的特定条件是否为真。
如果条件为假,则断言方法会抛出AssertionFailedError
异常,然后通常由测试运行器报告。您可以在断言方法的第一个参数中提供一个字符串,以便在断言失败时提供一些上下文详情。
如果条件为真,则测试通过。在两种情况下,测试运行器都会继续运行测试用例中的其他测试方法。
添加测试方法来验证一个活动
接下来,添加一个或多个测试方法来验证活动的布局和功能行为。
例如,如果您的活动包括一个 TextView,您可以添加一个类似于以下内容的测试方法来检查它是否具有正确的标签文本:
public void testMyFirstTestTextView_labelText() {
final String expected =
mFirstTestActivity.getString(R.string.my_first_test);
final String actual = mFirstTestText.getText().toString();
assertEquals(expected, actual);
}
testMyFirstTestTextView_labelText()
方法只是检查 TextView 的默认文本(由布局设置)是否与strings.xml
资源中定义的预期文本相同。
注意
在命名测试方法时,您可以使用下划线来区分正在测试的内容和正在测试的具体情况。这种风格使得更容易看到确切测试了哪些情况。
在进行这种类型的字符串值比较时,最好从资源中读取预期字符串,而不是在比较代码中硬编码字符串。这样可以防止在资源文件中修改字符串定义时轻松破坏您的测试。
要执行比较,将预期和实际字符串作为参数传递给assertEquals()
方法。如果这些值不相同,断言将抛出AssertionFailedError
异常。
如果您添加了一个testPreconditions()
方法,请在 Java 类中的testPreconditions()
定义之后放置您的测试方法。
您可以在 Eclipse 的“包资源管理器”中轻松构建和运行您的测试。要构建和运行您的测试,请按照以下步骤进行:
-
将 Android 设备连接到计算机。在设备或模拟器上,打开设置菜单,选择开发者选项,并确保USB 调试已启用。
-
在“项目资源管理器”中,右键单击您之前创建的测试类,然后选择运行为 | Android JUnit 测试。
-
在Android 设备选择器对话框中,选择刚刚连接的设备,然后单击确定。
-
在 JUnit 视图中,验证测试是否通过,没有错误或失败。
性能分析工具
在屏幕上放置像素涉及四个主要的硬件部件:CPU 计算显示列表,GPU 将图像渲染到显示器,内存存储图像和数据,电池提供电力。每个硬件部件都有约束;推动或超过这些约束会导致您的应用变慢,降低显示性能,或耗尽电池。
要发现导致特定性能问题的原因,您需要深入了解,使用工具收集有关应用程序执行行为的数据,将这些数据显示为列表和图形,理解和分析所见的内容,并改进您的代码。
Android Studio 和您的设备提供了性能分析工具,记录和可视化应用的渲染、计算、内存和电池性能。
Android Studio
Android Studio 是 Android 应用开发的官方 IDE,基于 IntelliJ IDEA。除了您期望从 IntelliJ 获得的功能外,Android Studio 还提供了以下功能:
-
灵活的基于 Gradle 的构建系统
-
构建变体和多个
.apk
文件生成 -
代码模板可帮助您构建常见的应用程序功能
-
具有拖放主题编辑支持的丰富布局编辑器
-
lint 工具用于捕捉性能、可用性、版本兼容性和其他问题
-
ProGuard 和应用签名功能
-
内置对 Google Cloud 平台的支持,轻松集成 Google Cloud 消息传递和 App Engine
如果您是 Android Studio 或 IntelliJ IDEA 界面的新手,本节将介绍一些关键的 Android Studio 功能。
Android 项目视图
默认情况下,Android Studio 在 Android 项目视图中显示项目文件。此视图显示项目结构的扁平化版本,可快速访问 Android 项目的关键源文件,并帮助您使用基于 Gradle 的构建系统。Android 项目视图:
-
在模块层次结构的顶层显示最重要的源目录
-
将所有模块的构建文件分组到一个公共文件夹中
-
将每个模块的所有清单文件分组到一个公共文件夹中
-
显示所有 Gradle 源集的资源文件
-
将不同语言环境、方向和屏幕类型的资源文件分组到单个资源类型的单个组中
Android 项目视图在项目层次结构的顶层显示所有构建文件,位于Gradle Scripts
下。每个项目模块都显示为项目层次结构的顶层文件夹,并包含以下四个元素:
-
java/
:模块的源文件 -
manifests/
:模块的清单文件 -
res/
:模块的资源文件 -
Gradle Scripts/
:Gradle 构建和属性文件
注意
例如,Android 项目视图将不同屏幕密度下ic_launcher.png
资源的所有实例分组到同一个元素下。
磁盘上的项目结构与此扁平化表示不同。要切换回分隔的项目视图,请从项目下拉菜单中选择您的项目。
内存和 CPU 监视器
Android Studio 提供了内存和 CPU 监视器视图,以便您可以轻松监视应用的性能和内存使用情况,跟踪 CPU 使用情况,查找已释放的对象,定位内存泄漏,并跟踪连接设备使用的内存量。在设备或模拟器上运行您的应用程序时,单击运行时窗口左下角的Android选项卡,以启动Android 运行时窗口。单击内存|CPU选项卡。
在 Android Studio 中监视内存使用情况时,您可以启动垃圾回收,并同时将 Java 堆转储到 Android 特定的 HPROF 二进制格式文件中。HPROF 查看器显示类、每个类的实例和引用树,以帮助您跟踪内存使用情况和查找内存泄漏。
Android Studio 允许您跟踪内存分配,因为它监视内存使用情况。跟踪内存分配可以让您监视在执行某些操作时对象的分配位置。了解这些分配可以让您调整与这些操作相关的方法调用,以优化应用程序的性能和内存使用。
跨平台工具
虽然我们只谈论 Android 游戏开发,但是没有跨平台支持,游戏开发是不可能高效的。我们已经讨论了游戏设计的灵活性。从典型的技术角度来看,应该可以将游戏部署到各种平台,如 iOS、Windows、游戏机等。
请始终记住,跨平台移动开发并不像只编写一次代码,通过工具进行翻译,然后将 iOS 和 Android 应用程序发布到各自的应用商店那样简单。
使用跨平台移动开发工具可以减少在两个平台上开发应用程序所需的时间和成本,但需要更新 UI 以匹配每个系统。例如,需要在两者之间进行调整,以使菜单和控制命令与 Android 设备和 iOS 设备的 UX 相匹配,因为它们在操作方式上有所不同。
有很多支持跨平台开发的工具。让我们来看看其中的一些:
Cocos2d-x
Cocos2d 主要用于二维游戏开发。它为开发者提供了基于其首选编程语言的五种不同分支或平台的选择,如 C++、JavaScript、Objective C、Python 和 C#(图片来源:www.cocos2d-x.org/attachments/802/cocos2dx_landscape.png
):
主要,这个工具对 Android、iOS 和 Windows Phone 都很有效。开发平台主要是 2D;然而,从 Cocos2d-x 3.x 开始,也可以开发 3D 游戏。
Cocos2d-x 与原生 Android 兼容,并且可以分别支持不同的处理器架构。这个工具在 Unix 环境中工作。
有一个庞大的开发者社区在 Cocos2d-x 上开发游戏。以下是从 Android 游戏开发角度看这个跨平台开发引擎的优缺点:
优点如下:
-
支持最常见的编程语言,如 C++
-
在本地环境中工作
-
轻量级和优化库
-
常见的 OpenGL 渲染系统
-
支持所有智能手机功能的 2D 开发
-
完全免费的开源引擎
缺点如下:
-
主要支持 2D 开发
-
跨平台部署很棘手和复杂
-
性能和内存优化较弱
-
没有可视化编程支持
-
引擎内没有提供调试工具
-
主要在手机平台上运行
Unity3D
Unity3D 是 Android 和 iOS 游戏开发者中最流行的跨平台引擎。虽然它主要针对移动平台进行了优化,但它足够强大,可以为其他主要游戏平台部署游戏,例如 PC、Mac、游戏机、Web、Linux、Xbox、PlayStation 等。目前,它支持 17 种不同的游戏开发平台(图片来源:img.danawa.com/images/descFiles/3/545/2544550_1_1390443907.png
):
一旦您在所有选择的平台上都有了游戏,Unity3D 甚至会帮助您将其分发到适当的商店,获得社交分享,并跟踪用户分析。
Unity3D 拥有最大的游戏开发者社区,几乎在游戏开发的各个方面都有很大的支持。它有自己的商店,您可以在那里找到有效的预构建自定义库、预构建插件等,这有助于开发者大大减少开发时间。以下是 Unity3D 的主要优缺点。
优点如下:
-
支持 17 种不同的游戏平台
-
非常简单的部署程序
-
可视化编辑器支持可视化编程
-
内置强大的调试工具
-
庞大的库支持
-
无忧开发
-
内置强大的内存和性能优化器
缺点如下:
-
相对较大的库大小
-
性能稍重(然而,它正在日益改进)
-
仅支持脚本语言(C#,JavaScript 和 Boo)
-
商业用途并非完全免费
-
主要适用于 3D
虚幻引擎
最近发布的虚幻引擎 4 是一个非常强大的跨平台游戏引擎。此前,该引擎仅专注于主机和 PC 平台,但现在已将其支持扩展到 Android 和 iOS 等移动游戏平台(图片来源:up.11t.ir/view/691714/1425334231-unreal-engine-logo.png
):
关于虚幻引擎 4 是否比 Unity3D 更好有很多争论。它们都有各自的优缺点。让我们来看看虚幻引擎 4 的优缺点:
优点如下:
-
蓝图功能允许灵活的可视化编程
-
通用 C++语言更适合开发人员
-
图形处理非常出色
-
内置动态阴影系统
-
简单易懂,开始制作游戏
-
在设备可扩展性方面提供广泛支持
-
编辑器中的材料设计
缺点如下:
-
移动优化仍未达到标准
-
缺乏 2D 开发工具
-
缺乏第三方插件的可用性
-
在移动开发中使用精灵很麻烦
-
仍专注于高配置硬件平台
PhoneGap
由 Adobe 拥有,PhoneGap 是初次应用程序开发者可以使用的免费资源,用于将代码从 HTML5,CSS 和 JavaScript 翻译过来。
他们在各个平台上维护 SDK,因此您可以为每个平台开发应用程序,这样您就少了一件要担心的事情。一旦您的应用程序完成,您可以与团队成员分享,以便审查是否需要进行任何改进。
除了 iOS 和 Android,PhoneGap 还为 BlackBerry 和 Windows 创建应用程序。因此,它真正是一个跨平台移动开发工具(图片来源:blogs.perceptionsystem.com/wp-content/uploads/2016/03/phonegap.png
):
PhoneGap 具有以下优点:
-
几乎支持所有移动平台
-
轻量级应用程序构建
-
支持 HTML,CSS 和 JavaScript
-
Cordova 应用程序的安装方式与本机应用程序相同
-
PhoneGap 是开源和免费的
它有以下缺点:
-
缺乏平台支持
-
缺乏第三方插件
-
本机 UI 仍然难以使用
Corona
Corona 的 SDK 承诺您可以在下载后的五分钟内开始编写新应用程序。这是另一个专为 2D 游戏图形优化的跨平台移动开发工具,可以帮助您比从头开始编写代码快 10 倍制作游戏(图片来源:qph.ec.quoracdn.net/main-qimg-fad64a16e531773325448e6ca699d117
):
Corona 的编程语言是 Lua,它是用 C 编写的,使其成为一种跨平台语言。Corona 选择 Lua 是因为他们发现它对于移动应用程序来说非常强大,占用空间很小。
Corona 具有以下优点:
-
在 FPS 方面具有良好的应用程序性能
-
良好的内置模拟器
-
轻量级应用程序构建
它有以下缺点:
-
使用不太流行的脚本语言 Lua
-
不免费
-
插件支持较少
-
没有设备上的调试支持
钛
使用 JavaScript,Titanium 的 SDK 可以创建原生的 iOS 和 Android 应用程序,同时在制作所有应用程序时可以重复使用 60%到 90%的相同代码,从而为您节省大量时间(图片来源:mobile.e20lab.info/wp-content/uploads/sites/2/2014/04/titanium.png
):
由于 Titanium 是一个开源工具,成千上万的开发人员不断为其做出贡献,使其变得更好,并赋予它更多功能。如果您发现系统中有错误,您也可以这样做。
优点如下:
-
初始阶段的快速灵活性
-
轻量级应用程序构建
-
常见的 JavaScript 语言
-
在 Android 和 iOS 上的 Web 和移动支持
-
开源
缺点如下:
-
缺乏插件支持
-
缺乏平台支持范围
-
基于脚本的开发增加了复杂性和工作量
-
性能因不同平台而异
-
与其他工具相比,优化不足
总结
开发工具对于任何游戏开发都是必不可少的;然而,在游戏设计和前期分析阶段,它们一直是低优先级的。当需要这些工具时,才意识到它们的必要性。
我们只讨论了 Android 开发的必备工具。但是现代游戏开发需要在硬件平台和操作系统上具有灵活性。这就是跨平台开发引擎出现的地方。这些工具帮助开发过程变得更快更高效;然而,这是以性能略微下降和更大的构建大小为代价的。在大多数情况下,开发人员对跨平台引擎的控制有限,但如果游戏是在原生 SDK 上开发的,就可以获得完全控制。
开发工具不仅在开发和调试方面有用——它们在优化游戏以及数据保护方面非常高效,这可能对游戏没有直接影响。一个优秀的开发人员必须使用优化工具来提供性能更好的游戏。
第四章:行业中的 Android 开发风格和标准
在 Android 中没有书面规则或指导来编写代码,除了语法语法。然而,全球大多数开发人员都遵循一些基本的编写 Android 代码的风格和标准。Android 基于 Java,因此大多数样式遵循 Java 标准。
在 Android 游戏开发方面,应遵循一些设计风格。它们不涵盖游戏设计,而更多是技术设计。这些样式和标准指示了适当的项目结构,类结构和文件夹/文件管理。
典型的游戏设计还涉及在 Android 平台上工作时遵循一些规则。在行业中,游戏设计方面遵循了一些风格。
在本章中,我们将通过以下主题查看这些风格和标准:
-
Android 编程结构
-
游戏编程规范
-
技术设计标准
-
游戏设计标准
-
其他风格和标准
-
不同的开发引擎有不同的风格
-
行业最佳实践
Android 编程结构
Android 风格或建议并不是明确的编程规则。然而,良好的编程实践总是包括一套规则。在 Android 中编码,代码结构遵循 Android 基本结构和层次结构。
Android 通常遵循 Java 的标准和风格。因此,Android 编程结构基本上是 Java 结构,遵循面向对象的风格。
类形成
Java 类格式应保持一致,并遵循 Javadoc 规则;标准结构应遵循以下顺序:
-
版权信息
-
许可信息
-
包声明
-
库导入
-
类描述和目的
-
类定义
-
全局变量
-
构造函数
-
方法
这是版权和许可信息格式:
/*
* Copyright (C) <year> authority
*
* <License information and other details>
*/
这是类和方法描述格式:
/*
* <Description>
* <Purpose>
*/
调用层次结构
与编码风格一样,没有定义的调用层次结构。然而,在 Android 游戏中,大多数开发人员遵循基本方法。在这种方法中,项目结构主要有三种类:
-
管理器和控制器
-
关联
-
实用类
游戏需要管理器和控制器来实施游戏规则和法规。它还用于控制游戏元素和状态的行为。大多数游戏包括多个部分或屏幕,例如菜单,级别选择,游戏玩法等。
这些部分可以称为状态,其中使用的元素称为关联。关联可能是独立的类。实用类基本上通过提供预定义功能来支持开发,例如游戏声音实现,记录存储管理,常用工具,网络连接等:

调用层次结构
在游戏循环中,主 Android 游戏线程循环将控制权交给主游戏管理器。主游戏管理器负责将线程和渲染控制传递给所需的状态管理器。主游戏管理器还负责根据当前线程的初始化和销毁状态管理器。此外,主游戏管理器在整个游戏周期内都是活动的,并管理主游戏活动。
状态管理器负责管理状态(主菜单,级别选择,游戏中等)和所有所需的关联类。状态管理器将调用传递给相应的关联类以执行特定任务。
实用类可以从层次结构中的任何层访问,具体取决于要求。
这是一个通用的架构,不是强制性的。许多开发人员以不同的方式设计调用层次结构。一切都很好,游戏流程也在不牺牲类/数据安全的情况下正常运行。
游戏编程规范
游戏程序员与其他软件程序员并没有太大的不同。然而,游戏编程需要比软件编程更强的逻辑能力。游戏设计感也是不同的。
游戏是一个互动娱乐系统。软件或应用程序旨在减少人类的实时计算任务。因此,很明显游戏的目的与软件或应用程序非常不同。
这就是为什么游戏编程必须遵循一些规范和协议。
游戏编程可以分为以下几个类别:
-
游戏性编程
-
图形编程
-
技术编程
游戏性编程
这是游戏部门最相关的编程。游戏性编程需要强大的逻辑、数学和分析能力。还需要一定的游戏设计感。游戏性编程包括人工智能、用户控制、物理、显示控制等等。
游戏程序员是与最负责任的设计师打交道的人,用于原型游戏。
图形编程
所有的视觉效果和影响都是由图形程序员制作的。他们负责游戏的视觉质量。在游戏运行时,有很大的空间来操纵图形资产。
图形编程就是要充分利用 GPU。如今,大多数游戏都是图形密集型的。最新的设备有独立、强大的 GPU 来支持高负荷的图形。
现代游戏展现出优质的图形显示。所有新的 3D 实时光照、粒子系统效果、视觉动态效果等完全依赖于图形程序员。挑战在于提高视觉质量而不影响游戏性能。
大部分时间,游戏性能会因为大量艺术资产处理而显著下降,这绝不是期望的情况。着色器或图形程序员必须在质量和性能之间取得平衡。
当游戏在不同平台上移植时,这通常是有效的。正如我们之前讨论过的,Android 上运行着一系列硬件平台,具有广泛的硬件规格。这种移植需要单独的着色器和资产。着色器程序指示图形处理器以特定方式渲染每个像素。
技术编程
这部分编程与游戏没有太多关系;然而,它确保了游戏的性能。除了性能外,网络管理、插件开发、优化等也是技术编程的一部分。以下是技术编程可能涉及的领域的列表:
-
声音编程
-
网络编程
-
游戏工具编程
-
研究和开发编程
声音编程
如今,声音是游戏的必要部分。一些游戏甚至是围绕音乐制作的。因此,声音编程已成为游戏编程的一部分。声音程序员主要具有数字信号处理的知识。声音程序员必须与声音设计师合作。
现代游戏使用 3D 音响系统。声音编程在不影响性能的情况下发挥着传递高质量声音的关键作用。
网络编程
老式游戏大多是为了在单个实例上运行。大部分时间,游戏不会与其他实例通信,因此在那个时候并不需要太多的网络编程。现代是网络时代;仅有一个实例是不够的。多人游戏如今非常普遍;即使是独立游戏也会与其他游戏实例通信,只是为了社交和货币化。
网络编程负责网络延迟、数据包优化、连接处理和维护通信。网络程序员还负责管理客户端-服务器通信和创建架构。
一些游戏在服务器上运行。客户端充当服务器上运行的游戏实例的显示设备。交易遵循实时同步。少数游戏甚至采用异步通信。网络编程确保了这种架构中的平稳和适当的过渡。
游戏工具编程
游戏开发离不开某些工具的支持。工具程序员可以让其他开发人员的生活变得天堂或地狱。适当的游戏工具编程可以极大地简化开发过程。开发工具的帮助可以节省大量时间和精力。
我们已经讨论了一些开发工具。然而,并不是所有的工具都必须与游戏无关。可能有一些工具是特定于游戏的。例如,可以制作一个工具来生成游戏中需要使用的数据库。
研究和开发编程
这种编程不是主要用于制作游戏。相反,这种编程有助于使游戏变得更好,并找到用于即将推出的游戏的新技术。
这种类型的编程需要对技术理解、硬件平台和本地开发具有强大的技能。程序员应该具有本地语言和汇编或硬件级语言的知识。
在 Android 游戏开发的情况下,研究程序员被指派探索新的 Android 设备以及新的功能和规格。然后,这些程序员尝试发现如何在游戏中以最佳方式使用这些功能。
这种编程完全负责具有各种传感器(如重力、光线、加速计等)使用等功能的游戏。最近在 Android 设备上开发虚拟现实就是这种实验的一个实际例子。
技术设计标准
大多数情况下,游戏开发围绕游戏设计展开;然而,开发过程受技术设计控制。技术设计考虑了实际游戏设计和需求的实时可行性的每一个可能方面。
技术设计包含以下部分:
-
游戏分析
-
设计模式和流程图
-
技术规范
-
工具和其他要求
-
资源分析
-
测试要求
-
范围分析
-
风险分析
-
变更日志
游戏分析
技术设计的这一部分彻底分析了游戏设计,并找出了技术在其中发挥重要作用的部分。游戏逻辑开发不是本节的一部分。然而,当游戏逻辑需要硬件依赖时,技术设计也会被考虑在内。
许多开发人员和组织在制定游戏设计后,开始实际开发过程之前制定技术设计文档的习惯。这有助于定义时间表并预测即将出现的挑战,以及可能的解决方案。
设计模式和流程图
本部分设计了游戏的类图和层次结构。游戏的流程图和服务器-客户端架构(如果需要)也在这里定义。
游戏技术设计的这一部分为开发人员提供了即将到来的开发的清晰图景。技术设计文档的这一部分应清楚地声明游戏模块的每一部分、程序结构、调用层次结构、第三方工具集成、数据库连接和服务器调用管理。
这样的图表视觉展示,展示流程图,总是任何开发过程的一个良好开端。
技术规范
技术规范指定了开发平台、目标设备集和目标操作系统。它还可能提到开发项目所需的硬件系统和软件。
在实际开发之前,这种识别是必不可少的。任何软件要运行,都需要一个能够支持软件的硬件平台。开发人员必须了解目标设备,并必须提供这些设备进行单元测试。任何额外的需求也在技术设计的这一部分中得到确认。
因此,基本上,这个规范有两个不同的部分。第一个是指定游戏指定运行的目标系统。第二个是根据设计确定创建游戏所需的系统。
工具和其他需求
技术设计中的这一部分涉及额外的工具和系统需求。在许多情况下,这一部分包含在技术规范中。然而,这部分有不同的目的。
这可能需要开发一个新的工具来进行实际的游戏开发。因此,工具程序员被引用到这一部分。Android 游戏开发并不在这一部分的范围之外。尽管大多数工具已经为 Android 开发准备就绪,但一些情况可能也需要一个特定于游戏的工具。在这种情况下,工具设计和单独的技术设计以及工具的使用在本节中提到。
资源分析
资源分析是关于人员依赖、人员技能水平、技术依赖和其他资源依赖的报告。这有助于估计项目成本并决定开发时间表。
测试需求
这是技术设计的另一个重要部分。测试是游戏开发过程中不可或缺的一部分。技术设计应该定义测试程序以及定义的测试用例。
游戏开发负责人确定了测试的阶段及其需求。测试工具可能在本节中声明。我们已经在前一章中提到了测试工具。在某些情况下,可能需要定制工具。
测试需求有四个主要部分:
-
测试资源需求
-
测试工具需求
-
测试用例
-
测试时间线
范围分析
每个游戏都有一个预定义的有限范围。特别是在 Android 设备上,种类最多,需要定义范围。在所有 Android 平台上以相同设计运行游戏几乎是不可能的。
技术设计的这一部分指示了游戏的可能范围。这可能确定运行游戏所需的最低配置、推荐配置和目标配置,以使游戏在最大性能下运行。
游戏范围定义了硬件平台的最小和最大范围。大多数开发人员喜欢将游戏设计范围最小化,以针对最大的硬件设备。技术设计文件是开发人员获取游戏性能范围的良好参考。
风险分析
在生产开始之前制作技术设计文件,因此有许多领域必须事先假定。这显然增加了项目的风险。然而,清楚地了解风险总是有助于开发人员在实际问题发生时找到解决方案。
这就是为什么风险分析对于任何技术设计标准都是强制性的原因。风险可以在不同领域进行分析。
在开发游戏时,技术需求或游戏设计可能会发生变化。因此,应该计算风险以适应这些变化,而不影响主要项目流程。
技术发展迅速。因此,在风险分析部分,技术变化也应该得到解决。在游戏开发的常见情况下,技术可能在开发过程中发生变化,以提高游戏质量。
变更日志
变更日志是包含技术文件从第一稿开始的所有变更的列表,根据日期和版本号进行排序。这有助于跟踪游戏的演变。
游戏设计标准
游戏设计几乎在游戏行业的每个组织中都有记录。这是几乎所有开发人员经常使用的标准之一。有时会跳过技术设计,以节省时间,一些设计师会在游戏设计中包含来自技术文件中最需要的部分。然而,这种方法是不推荐的。
维护标准游戏设计的基本方法包括以下部分:
-
游戏概述
-
游戏玩法细节
-
游戏进展
-
故事板和游戏元素
-
关卡设计
-
人工智能
-
艺术风格
-
技术参考
-
变更日志
游戏概述
这一部分定义了游戏的性质以及目标受众。这一部分包含了关于游戏概念,玩法和外观的简要介绍。工作标题在之前提到。
游戏概述基本上是对即将制作的游戏的几乎所有方面的简要介绍。这一部分可能展示了市场研究,以支持所选择的游戏概念和类型。
游戏玩法细节
游戏玩法控制和控制游戏玩法的首选用户界面在这一部分中被定义。这是游戏中最重要的部分之一。游戏玩法应该针对其所针对的每个硬件平台进行优化。游戏可能部署到手机,平板电脑和游戏机上。因此,出于明显的原因,为不同的控制方案定义了不同的控制方案。
游戏进展
游戏进展定义了游戏的生命周期及其随时间的演变。游戏是一个动态的娱乐系统。因此,用户在任何时候都不能感到无聊,这一部分负责用户留存。
故事板和游戏元素
游戏设计的这一部分定义了游戏概念的背景。这并不意味着有一个真实基于故事的游戏背景。然而,每个游戏都必须有一些元素或对象,围绕这些元素或对象进行游戏。
例如,一个横向滚动的奔跑游戏将有一个角色,一些障碍,环境物体等。它们被称为游戏元素。奔跑的原因是背景故事。
举个例子,让我们假设一个井字棋游戏。背景故事并不是必要的;然而,叉,圈,和网格是游戏的元素,需要被设计和风格化。
关卡设计
关卡是游戏进展的结果。每个关卡都有一个概要,介绍,材料或元素,以及一个目标。根据游戏的不同,可以提供更多信息。
人工智能
人工智能帮助游戏在实时场景中体验。它可以是对手,敌人,障碍,友好支持,情况检测,碰撞检测,路径规划,或者任何自动确定游戏状态的东西。
人工智能对每个游戏都是强制性的。它应该意味着在一个领域内执行某项任务的数学或物理算法。
艺术风格
游戏设计文件还包括外观和风格的风格和方向。设计师也可以包括一些参考。这给了艺术家在思考艺术方向时一个头脑风暴。艺术是吸引用户最有力的部分。
这一部分不包括艺术的技术规范。开发人员可以在这里包括一些技术指导,以优化游戏内使用的资产。
技术参考
在设计文件的这一部分,包括了所有的技术参考。对于 Android 游戏开发,这一部分可能包括一系列具有最低规格的设备,目标平台,基础图形引擎,开发引擎等。这是实际技术设计文件的缩小版本。当开发人员或组织选择不制作任何单独的技术文件时,他们在这个范围内提到所有的技术规格。
变更日志
变更日志记录了文件的更改历史,包括版本和日期。这与任何变更日志文档具有相同的目的。
其他风格和标准
在前面的章节中提到的标准定义了制作游戏的一般流程。我们将讨论一些在游戏开发行业广泛使用的这些流程。
大多数大型组织都遵循一定的项目管理和跟踪系统。这可能会使开发过程变慢,但足够有效地减少风险并提高游戏质量。一些小型组织或个人开发者为了尽快完成产品而不遵循这样的流程。
这些风格是相互对立的,有不同的后果。然而,建议您遵循一种有利于长远发展的程序。快速修复不能成为永久解决方案。
另一个常用的做法是修补代码以解决错误。这也极易受到诸如项目崩溃、截止日期失败和产生重大错误等威胁。在游戏开发中,最常见的问题是设备崩溃,这在任何硬件平台上都是最不期望发生的。在大多数情况下,这是因为糟糕地处理异常而发生的。
玩游戏并理解游戏对于制作游戏是非常必要的。大多数游戏开发组织鼓励开发者玩游戏并研究游戏。对于 Android 开发者来说,多玩不同平台的游戏是非常好的练习。已经确定 Android 是最好的移动或小型硬件操作系统。它也在大型平台上有所发展。作为 Android 开发者,时刻关注其他平台的特性和发展,并尝试在 Android 中实现它们是一种良好的实践。这是 Android 游戏研发团队的工作。
不同的开发引擎的不同风格
我们已经讨论了一些开发工具和引擎。当前的游戏行业不鼓励仅针对特定硬件或操作平台开发游戏。我们可以找到很多平台独占的游戏,但这意味着一个商业决定。
很明显,相同的开发方法不适用于每个开发引擎。例如,在本地 Android 中的开发风格将不同于 Unity3D 游戏引擎中的开发风格。基本原因是:
-
不同的编程语言
-
不同的工作原则
-
不同的目标平台
不同的编程语言
每种编程语言都有自己的编程风格和结构。通过 C++在 Android NDK 上开发游戏与使用 Java 在 Android SDK 上制作游戏是不同的。使用第三方跨平台引擎开发游戏也是不同的。
我们这里不是在谈论语法上的差异。这是关于编码风格。在 Android NDK 中使用 C++与在 Unreal Engine 4 或 Cocos2d-x 中使用 C++是不同的。尽管 C++核心库是相同的,但每个工具都引导开发者朝着不同的风格方向以获得最佳结果。
不仅仅是 C++和 Java,游戏行业还在使用 C#、Python、JavaScript、Lua、Boo 等。许多引擎支持多种编程语言,以吸引更多的开发者。
不同的工作原则
不同的游戏引擎或游戏制作工具遵循不同的工作原则。开发者应该足够灵活,适应这些不同的系统。不同引擎总是有不同的代码结构、文件夹结构和程序层次。
对于本地开发,是开发者设定标准。引擎带有一套标准,预期所有在该引擎上工作的开发者都会遵循相同的原则。
例如,Unity3D 的工作原理与 Unreal Engine 或 Cocos2d-x 大不相同。Cocos2d-x 不支持可视化编程,而 Unreal Engine Blueprint 则完全支持可视化编程。因此,尽管部署目标相同,开发方法必须不同。
不同的目标平台
现代跨平台游戏开发工具已经最小化了风格和标准的差异。然而,对于很少数的工具来说,风格和标准仍然不同。
现在,如果我们只谈论安卓,那么考虑一下上面的不同硬件平台。开发风格并不总是指编程。它涉及到从设计到部署的完整项目维护。安卓控制台开发与安卓手机开发不同。
从游戏玩法角度来看,设计风格通常随着游戏时间、控制和外观而变化。在控制台上的平均游戏时间可能长达 2 小时,而移动设备的游戏时间几乎是这个时间的 5%。触摸界面与按键界面大不相同,而游戏控制器界面也不同。因此,即使开发者计划使用相同的引擎部署相同的游戏,由于非常明显的原因,界面设计风格也会发生变化。
行业最佳实践
尽管存在大量的风格和标准,大多数开发者喜欢遵循一些共同的标准,以在游戏开发过程中创建稳定性。让我们讨论一些行业常见的标准领域:
-
设计标准
-
编程标准
-
测试标准
设计标准
每款游戏的设计和概念都各不相同。最佳的设计标准做法是将其适当地记录下来,并留有改进的余地。文件必须足够清晰,以便用户理解。无论概念是什么,开发者都不能在没有对标准有适当理解的情况下实施它。
设计范围不能太开放,以至于可以改变整个游戏;这会导致生产时间严重延误。然而,它应该始终有限的范围,以随着想法的增长改善生产时间。
设计必须指定目标类型和受众,以及有效的原因。这也应包括可能的目标硬件平台。
对于安卓开发,移动游戏是当今最大的行业。因此,大多数安卓开发者主要关注移动游戏。然而,设计师应该始终留有余地,使游戏能够部署到其他平台,如可穿戴设备、控制台等。
编程标准
编程是设计的执行。这是任何游戏制作中最重要的部分。标准的代码应该是可读的、模块化的,并且有适当的文档记录。以前有两种编程方法:过程化和面向对象。在现代游戏行业中,开发者遵循面向对象的方法。因此,编程标准发生了很大变化。以前,使用m_
和l_
作为变量前缀来指示它们在面向对象结构中的状态是常见做法。还有一些其他符号,如i
、f
和b
等,用来表示变量类型。
现代标准主要遵循驼峰和帕斯卡命名法作为它们的命名约定。常见做法是对所有类、接口、枚举、事件、结构、命名空间和方法名使用帕斯卡命名法,其他元素应使用驼峰命名法。
编程语言中的驼峰命名法意味着名称的第一个字母应为小写,这被称为小驼峰命名法。帕斯卡命名法规定名称的第一个字母应大写,这被称为大驼峰命名法。
在任何语言的编程中,方法中的参数数量或每行的字数都没有技术上的限制。然而,常见的行业做法是方法的参数数量应在八个以内,编码每行的字数不应超过 20 个。
手动限制的原因是为了减少复杂性,提高代码的可读性。出于同样的原因,方法体应限制在 200 行以内,并且分割类结构始终是首选。
测试标准
测试是对设计实施的验证过程。测试还检查开发标准,并确保游戏的质量。
在大多数情况下,测试程序主要包括自动化测试和手动测试两个部分。程序员必须编写用于检查核心开发的自动化测试代码。这部分被称为测试代码,不得包含在主要开发项目中。需要专门的测试人员进行手动测试。他们的工作是从用户的角度确保游戏的质量。
大多数游戏开发公司都遵循测试程序的检查表。这个检查表通常包含定义的测试用例。测试用例主要由开发人员和设计师定义,测试人员需要执行这些用例。我们将在后面的章节中详细讨论测试。
总结
任何软件开发都必须遵循一定的协议和标准。游戏开发也不例外。遵循标准有助于产品在较长时间内持续存在。现代 Android 游戏的生命周期包括推出后的许多更新,在许多情况下游戏会持续多年。对于一个组织来说,同一个开发人员可能不会长时间地在同一个游戏上工作,这在游戏行业中是非常普遍的情况。
开发项目必须足够易读,以便新开发人员采用,并且足够灵活,以适应游戏更新的新变化。
最后,让我们总结一下在 Android 游戏开发行业中常见的强制性任务。游戏开发人员应该遵循游戏开发原则。首先,他们必须创建适当的游戏设计文件,以便程序员和艺术家能够清楚地理解。然后,他们应该创建适当的技术设计文件,为程序员和游戏工程师提供所有可能的技术信息。组织中的特定开发流程定义和维护开发标准。程序员必须以模块化的方式编写代码,以避免未来的更改,并增加代码的可重用性。适当的命名约定总是有助于更好地理解代码,并为轻松编辑和重用做好准备。
游戏开发人员应该遵循的另一种做法是玩很多游戏并享受游戏。