Skip to content

Latest commit

 

History

History
390 lines (223 loc) · 24.4 KB

File metadata and controls

390 lines (223 loc) · 24.4 KB

四、安卓开发风格和行业标准

在安卓系统中,除了语法之外,没有写代码的书面规则或方向。然而,全球大多数开发人员都遵循一些基本的风格和标准来编写安卓代码。安卓是基于 Java 的,所以大部分风格化都遵循 Java 标准。

说到安卓游戏开发,有几个设计风格是应该遵循的。它们不包括游戏设计,而是更多的技术设计。这些类型的风格和标准表明了适当的项目结构、类结构和文件夹/文件管理。

典型的游戏设计还包括在安卓平台上工作时遵循一些规则。在游戏设计方面,一些风格正在被业界效仿。

在本章中,我们将通过以下主题来了解这些风格和标准:

  • 安卓编程结构
  • 游戏编程规范
  • 技术设计标准
  • 游戏设计标准
  • 其他风格和标准
  • 不同的开发引擎有不同的风格
  • 行业最佳实践

安卓编程结构

安卓风格或者推荐并不是一个确定的编程规则。然而,一个好的编程实践总是包含一套规则。要在 Android 中编码,代码结构遵循 Android 基础结构和层次结构。

安卓通常遵循 Java 的标准和风格。所以,Android 的编程结构基本上是 Java 结构,遵循 OOP 风格。

班级形成

Java 类格式要一致,遵循 Javadoc 规则;标准结构应遵循以下顺序:

  1. 版权信息
  2. 许可证信息
  3. 包装声明
  4. 库导入
  5. 类别描述和目的
  6. 类别定义
  7. 全局变量
  8. 构造器
  9. 方法

这是版权和许可信息格式:

/*
* Copyright (C) <year> authority
* 
* <License information and other details>
*/

这是类和方法描述格式:

/*
* <Description>
* <Purpose>
*/

调用层次结构

和编码风格一样,没有定义调用层次。然而,在安卓游戏中,大多数开发人员遵循一种基本的方法。在这种方法中,项目结构中主要有三种类:

  • 管理者和控制者
  • 联合
  • 实用程序类

一个游戏需要管理者和控制者牵连游戏规则和条例。它也用于控制游戏元素和状态的行为。大多数游戏由多个部分或屏幕组成,例如,菜单、级别选择、游戏玩法等。

这些部分可以称为状态,其中使用的元素称为关联。合伙人可能是各自独立的阶层。实用程序类主要通过提供预定义的功能来支持开发,如游戏内声音实现、唱片店管理、通用实用程序、网络连接等:

Call hierarchy

呼叫层次结构

在游戏循环中,主安卓游戏线程循环将控制权移交给主游戏管理器。主游戏管理器负责将线程和渲染控制传递给所需的状态管理器。主游戏管理器还负责初始化和销毁状态管理器,具体取决于当前线程。此外,主游戏管理器在整个游戏周期中是活跃的,并且还管理主游戏活动。

状态管理器负责管理一个状态(主菜单、等级选择、游戏内等等)和所有需要的相关类。州管理人员将呼叫传递给各自的同事,以执行特定的任务。

实用工具类可以从层次结构中的任何一层访问,具体取决于需求。

这是一个非强制性的通用架构。许多开发人员以不同的方式设计调用层次结构。一切都很好,游戏流程也运行正常,没有牺牲类/数据安全。

游戏编程规范

游戏程序员和其他任何软件程序员没有太大区别。然而,游戏编程比软件编程需要更强的逻辑技能。游戏设计感也不一样。

游戏是一种互动娱乐系统。软件或应用意味着减少人工计算的实时任务。因此,很明显,游戏的用途与软件或应用截然不同。

这就是为什么游戏编程必须遵循一些规范和协议。

游戏编程可以分为以下几类:

  • 游戏编程
  • 图形编程
  • 技术编程

游戏性编程

这是游戏部门最相关的编程。游戏性编程需要很强的逻辑、数学和分析技能。游戏设计感也是需要的。游戏性编程包括 AI、用户控制、物理、显示控制等等。

游戏程序员是那些与最负责的游戏原型设计者打交道的人。

图形编程

所有的视觉效果和冲击力都是由图形程序员制作的。他们对游戏的视觉质量负责。在游戏运行时,有很大的范围来操纵图形素材。

图形编程就是要从图形处理器中获得最大的价值。如今,大多数游戏都是重图形的。最新的设备有单独的强大的图形处理器来支持重型图形。

现代游戏代表了出色的图形显示质量。所有新的 3D 实时光照、粒子系统效果、视觉运动效果等等完全依赖于图形编程器。挑战是在不影响游戏性能的情况下提高视觉质量。

很多时候,游戏的性能会因为繁重的美术素材处理而大幅下降,这从来都不是一个想要的情况。着色器或图形程序员必须平衡质量和性能。

这在游戏跨不同平台移植时最为有效。正如我们之前所讨论的,一系列硬件平台具有广泛的硬件规格,运行在安卓系统上。这种移植需要单独的着色器和资源。着色器程序指示图形处理器以特定方式渲染每个像素。

技术编程

这部分编程跟游戏没有太多关系;但是,它保证了游戏性能。除了性能,网络管理、插件开发、优化等也是技术编程的一部分。以下是技术编程的可能领域列表:

  • 声音编程
  • 网络编程
  • 游戏工具编程
  • 研发规划

声音编程

如今,声音是游戏中必不可少的一部分。有些游戏甚至是围绕音乐制作的。声音编程因此成为游戏编程的一部分。声音程序员主要有数字信号处理的知识。声音程序员必须和声音设计师一起工作。

现代游戏使用 3D 音响系统。声音编程在不影响性能的情况下提供高质量的声音方面发挥着至关重要的作用。

网络编程

老年游戏大多是为了在单一实例上运行而制作的。大部分时间,游戏没有和其他实例交流,所以那个时间点不太需要网络编程。现代是网络化的时代;仅仅举一个例子是不够的。多人游戏在今天非常普遍;即使是独立游戏也只是为了社会化和货币化而与其他游戏实例进行交流。

网络编程负责网络延迟、数据包优化、连接处理和通信维护。网络程序员还负责管理客户机-服务器通信和创建体系结构。

有些游戏在服务器上运行。客户端充当服务器上运行的游戏实例的显示设备。交易遵循实时同步。很少有游戏遵循异步通信。网络编程确保了这种体系结构的平稳和适当的过渡。

游戏工具编程

游戏开发离不开某些工具的支持是无法完成的。工具程序员可以让其他开发人员的生活变成人间地狱或天堂。适当的游戏工具编程可以大大简化开发过程。借助开发工具可以节省大量的时间和精力。

我们已经讨论了一些开发工具。然而,并不是所有的工具都必须独立于游戏。可能很少有工具是游戏专用的。例如,可以制作一个工具来生成在游戏中使用的所需数据库。

研发规划

这种编程主要不是为了做游戏。相反,这种编程有助于让游戏变得更好,并为即将到来的游戏找到新的技术。

这种类型的编程需要很强的技术理解、硬件平台和本地开发技能。程序员应该具备本地语言和汇编或硬件级语言的知识。

在安卓游戏开发的情况下,研究程序员被指派探索新的安卓设备以及新的功能和规范。然后,这些程序员试图发现如何在游戏中以最好的方式使用该功能。

这种编程只负责游戏的功能,如使用各种传感器,如重力,光,加速度计,等等。最近用安卓设备开发的虚拟现实就是这种实验的一个实际例子。

技术设计标准

游戏开发大多围绕游戏设计;然而,开发过程由技术设计控制。技术设计考虑了实际游戏设计的实时可行性和要求的每一个可能的方面。

技术设计包含以下部分:

  • 博弈分析
  • 设计模式和流程图
  • 技术规范
  • 工具和其他要求
  • 资源分析
  • 测试要求
  • 范围分析
  • 风险分析
  • 更改日志

博弈分析

技术设计这一部分对游戏设计进行了深入的分析,找出了技术发挥主要作用的部分。游戏逻辑开发不是这部分的一部分。但是,当游戏逻辑需要硬件依赖时,那么在技术设计中也要考虑这一部分。

很多开发人员和组织都有一个习惯,就是在创建游戏设计之后,开始实际开发过程之前,制作一份技术设计文档。这有助于定义时间表和预测即将到来的挑战,以及可能的解决方案。

设计模式和流程图

本节为游戏设计类图和层次。游戏流程图和服务器-客户端架构(如果需要)也在这里定义。

游戏技术设计的这一部分为开发者提供了即将到来的开发的清晰画面。游戏模块、程序结构、调用层次、第三方工具集成、数据库连接和服务器调用管理的每一个部分都应该在这部分技术设计文档中明确声明。

这样的图表的可视化显示,显示流程图,总是任何开发过程的开端。

技术规范

技术规范规定了开发平台、目标设备集、目标操作系统。它还可能提到开发项目需要什么硬件系统和软件。

在开始实际开发之前,这种识别是至关重要的。任何软件要运行,都需要一个能够很好地支持软件的硬件平台。开发人员必须知道目标设备,并且必须为他们提供这些设备来执行单元测试。技术设计的这一部分还确定了任何附加要求。

因此,基本上,本规范中有两个不同的部分。首先是指定游戏被指定运行的目标系统。二是根据设计确定创建游戏所需的系统。

工具和其他要求

技术设计中的这一节是指附加工具和系统要求。在许多情况下,本节包含在技术规范中。然而,这部分服务于不同的目的。

这可能会产生为实际游戏开发开发新工具的需求。因此,工具程序员参考这一节。安卓游戏开发不在本节讨论范围之外。虽然大多数工具都可以很容易地用于安卓开发,但是一些场景可能也需要一个游戏专用的工具。在这种情况下,工具设计和单独的技术设计,以及工具的使用在本节中提到。

资源分析

资源分析是关于员工依赖、员工技能水平、技术依赖和其他资源依赖的报告。这有助于估计项目成本和决定开发时间表。

测试要求

这是技术设计的另一个重要部分。测试是游戏开发过程中不可或缺的一部分。技术设计应该定义测试程序以及定义的测试用例。

游戏的开发主管确定测试的阶段及其要求。测试工具可以在本节中声明。我们在上一章已经提到了测试工具。在某些情况下,可能需要定制的工具。

测试需求有四个主要部分:

  • 测试资源需求
  • 测试工具要求
  • 测试用例
  • 测试时间表

范围分析

每款游戏都有预定义的限定范围。尤其是安卓设备,种类最多,需要范围定义。在所有安卓平台上运行相同设计的游戏几乎是不可能的。

这部分技术设计指出了游戏的可能范围。这可以确定以最高性能运行游戏所需的最低配置、推荐配置和目标配置。

游戏范围定义了硬件平台的最小和最大范围。大多数开发者喜欢最小化游戏设计范围,以最大化硬件设备为目标。技术设计文档是开发者了解范围内游戏性能的良好参考。

风险分析

技术设计文件是在生产开始前制作的,所以有很多领域需要预先假设。这显然增加了项目的风险。然而,对风险有一个清晰的概念总是有助于开发人员在实际问题发生时获得解决方案。

这就是任何技术设计标准都必须进行风险分析的原因。风险可以在不同的领域进行分析。

开发游戏时,技术要求或游戏设计可能会发生变化。因此,应计算风险,以适应这些变化,而不影响主要项目管道。

技术发展很快。因此,在风险分析部分,技术的改变也应该被解决。在游戏开发的常见场景中,技术可能会在开发过程中发生变化,以提高游戏质量。

更改日志

变更日志是根据日期和版本号,包含技术文件从初稿开始的所有变更的列表。这有助于跟踪游戏的发展。

游戏设计标准

游戏设计几乎在游戏行业的每个组织中都有记录。这是几乎所有开发人员最常使用的标准之一。技术设计有时会被跳过,以节省一些时间,一些设计师在游戏设计中包含了技术文档中最需要的部分。但是,不建议使用这种方法。

维护标准游戏设计的基本方法包括以下几个部分:

  • 游戏概述
  • 游戏细节
  • 游戏进程
  • 故事板和游戏元素
  • 水平设计
  • 人工智能
  • 艺术风格
  • 技术参考资料
  • 更改日志

游戏概述

本节定义了游戏的性质及其目标受众。这一部分包含一个关于游戏概念、游戏性和外观的简介。工作标题是事先提到的。

游戏概述基本上是对游戏几乎所有方面的简要介绍。这一部分可能会设计一个市场研究来支持游戏的概念和游戏类型。

游戏细节

游戏性控件和控制游戏性的首选用户界面在本节中定义。这是游戏最重要的部分之一。游戏应该针对它所瞄准的每个硬件平台进行优化。这款游戏可以部署在手机、平板电脑和游戏机上。因此,出于显而易见的原因,定义了不同的控制方案。

游戏进程

游戏进程定义游戏生命周期及其随时间的演变。游戏是一个动态的娱乐系统。所以,用户不能在任何时间点感到无聊,这个部分负责用户保留。

故事板和游戏元素

这部分游戏的设计定义了游戏概念的背景。这并不意味着有一个真实的基于故事的游戏背景。然而,每一个游戏都必须有一些元素或物体,游戏围绕着这些元素或物体进行。

例如,一个侧滚跑游戏会有一个角色、几个障碍物、环境物体等等。它们被称为游戏元素。跑步的原因是背景故事。

在另一个例子中,让我们假设一个井字游戏。背景故事不是必须的;然而,十字、圆圈和网格是游戏的元素,需要设计和风格化。

水平设计

等级是游戏进程的结果。每一级都有一个大纲、简介、材质或元素以及一个目标。更多信息可以根据游戏给出。

人工智能

人工智能帮助在实时场景中体验游戏性。可能是对手、敌人、障碍物、友军支援、情况侦测、碰撞侦测、寻路,或是任何自动决定游戏状态的东西。

人工智能对每一场比赛都是强制性的。它应该暗示一种数学或物理算法来执行一个领域内的特定任务。

艺术风格

一个游戏设计文档也包括了观感的风格和方向。设计者也可能包括很少的参考。这给了艺术家一个思考艺术方向的开端。艺术是游戏最初吸引用户最有力的部分。

本节不包括艺术的技术规范。开发者可以在这里包括一些技术指导,以优化游戏中使用的素材。

技术参考

在设计文件的这一部分,包括了所有的技术参考。对于安卓游戏开发,这一部分可能包括一系列最低规格的设备,目标平台,基础图形引擎,开发引擎等等。这是实际技术设计文件的微型版本。当开发人员或组织选择不制作任何单独的技术文档时,他们会提到该范围内的所有技术规格。

更改日志

变更日志保存文档中的变更历史以及版本和日期。这与任何更改日志文档的目的相同。

其他风格和标准

前面几节提到的标准定义了制作游戏的一般过程。我们将讨论游戏开发行业中广泛使用的一些流程。

大多数大型组织都遵循一定的项目管理和跟踪系统。这可能会使开发过程变得更慢,但足以将风险降至最低并提高游戏质量。少数小型组织或个人开发人员不遵循这样的流程,以便尽早完成产品。

这些风格是相反的,有不同的后果。但是,建议您遵循一个从长远来看有帮助的程序。快速解决方案不可能是永久的解决方案。

一种更常用的做法是修补代码以解决错误。这也极易受到威胁,如项目崩溃、截止日期失败和重大错误的产生。在游戏开发中,最常见的问题是设备崩溃,这在任何硬件平台上都是最不可能的。在大多数情况下,发生这种情况是因为异常处理不当。

玩游戏,了解游戏,做游戏是非常必要的。大多数游戏开发组织鼓励开发人员玩和学习游戏。对于安卓开发者来说,玩很多不同平台的游戏也是很好的做法。已经确定安卓是最好的移动或小规模硬件操作系统。它也涉足大型平台。作为一个安卓开发者,关注其他平台的功能和开发,并尝试在安卓中实现,总是一个很好的做法。这是安卓游戏研发团队的工作。

不同开发引擎的风格不同

我们已经讨论了一些开发工具和引擎。当前的游戏行业不鼓励仅针对特定硬件或操作平台开发游戏。我们可以找到很多平台专属的游戏,但这意味着一个商业决策。

很明显,同样的开发并不适用于每一个开发引擎。例如,原生安卓系统中的开发风格将不同于 Unity3D 游戏引擎中的开发风格。基本原因是:

  • 不同的编程语言
  • 不同的工作原则
  • 不同的目标平台

不同的编程语言

每一种编程语言都有自己的编程风格和结构。用安卓 NDK 通过 C++ 开发游戏和用 Java 在安卓 SDK 做游戏不一样。使用第三方跨平台引擎开发游戏也不一样。

我们在这里不是在讨论句法差异。这是关于编码风格。将 C++ 用于 Android NDK 不同于将 C++ 用于虚幻引擎 4 或 Cocos2d-x,虽然 C++ 核心库保持不变,但每一个工具都将开发者引向不同的风格方向,以获得最佳效果。

不仅仅是 C++ 和 Java,还有 C#、Python、JavaScript、Lua、Boo 等等都在游戏行业使用。许多引擎支持多种编程语言,以最大限度地吸引开发人员。

不同的工作原理

不同的游戏引擎或游戏制作工具遵循不同的工作原理。开发人员应该足够灵活,以适应这些不同的系统。不同的引擎总是有不同的代码结构、文件夹结构和程序层次结构。

对于原生开发,是开发人员设定标准。引擎自带一套完整的标准,预计所有从事该特定引擎的开发人员都将遵循相同的原则。

比如 Unity3D 的工作原理与虚幻引擎或者 Cocos2d-x 相差甚远,Cocos2d-x 不支持可视化编程,而虚幻引擎 bluetooth 有完整的可视化编程支持。因此,尽管有相同的部署目标,但是开发方法必须不同。

不同的目标平台

现代跨平台游戏开发工具已经将风格和标准的差异降到了最低。但是,对于极少数工具来说,风格和标准还是不一样的。

现在,如果我们在这里只谈论安卓,那么考虑一下它上面不同的硬件平台。开发风格并不总是意味着编程。它是关于维护整个项目,从设计到部署。安卓控制台开发不同于安卓手机。

从游戏性的角度来看,设计的一般风格随着游戏时间、控制和外观而变化。控制台上的平均会话时间可能长达 2 小时,而移动会话时间几乎是这个时间的 5%。触摸界面与按键界面有很大不同,按键界面也不同于游戏控制器界面。因此,即使开发人员计划部署使用相同引擎制作的相同游戏,界面设计的风格也会因为非常明显的原因而改变。

行业最佳实践

虽然有很多风格和标准,但大多数开发人员喜欢保持一些共同的标准,以在游戏开发过程中创造稳定性。让我们来讨论一些业界通常采用的标准领域:

  • 设计标准
  • 编程标准
  • 测试标准

设计标准

每款游戏的设计和概念各不相同。最佳的设计标准实践是将其与改进范围一起正确地记录下来。文档必须足够清晰,用户才能理解。不管这个概念是什么,如果没有对标准的正确理解,开发人员就无法实现它。

设计范围一定不能大到可以改变整个游戏;这导致生产时间的严重延迟。然而,随着时间的推移,它应该总是有一个有限的范围来用想法改进生产。

设计必须指定目标类型和受众以及有效的理由。这还应该包括可能的目标硬件平台。

对于安卓开发来说,移动游戏是当今最大的行业。所以,大部分安卓开发者主要把重心放在了手机游戏上。然而,设计师应该始终为游戏在其他平台上的部署留出空间,如可穿戴设备、游戏机等。

编程标准

编程是设计的执行。它是任何游戏制作中最重要的部分。一段标准的代码应该是可读的、模块化的,并且有适当的文档记录。以前,有两种编程方法:过程式和面向对象。在现代游戏行业中,开发人员遵循面向对象的方法。由于这个原因,编程标准发生了很大变化。以前,通常的做法是使用m_l_作为变量的前缀,以指示它们在面向对象结构中的状态。还有一些其他的符号,如ifb等来表示变量类型。

现代标准主要遵循骆驼和帕斯卡的命名惯例。常见的做法是对所有类、接口、枚举、事件、结构、命名空间和方法名使用 Pascal 大小写,其他元素应该使用 Camel 大小写系统。

编程语言中的 CamelCase 是指名字的第一个字母要小写,具体就是 Lower CamelCase 。帕斯卡大小写系统规定第一个字母应该大写,称为 上卡米尔凯斯

在技术上,在用任何语言编程时,对一个方法中的参数数量或每行的字数都没有限制。然而,通常的行业惯例是,参数的数量应该在 8 个以内,每行编码的字母数量不应该超过 20 个。

这种手动限制的原因是为了降低代码的复杂性和可读性。出于同样的原因,一个方法体应该被限制在 200 行,并且一个分裂的类结构总是首选的。

检测标准

测试是设计实现的验证过程。测试也检查开发标准,也保证游戏质量。

在大多数情况下,测试过程主要包括两部分,自动测试和手动测试。程序员必须编写自动化测试代码来检查核心开发。这部分称为测试代码,不得包含在主开发项目中。它需要专门的测试人员进行手动测试。他们的工作是从用户的角度保证游戏的质量。

大多数游戏开发公司遵循测试程序的清单。这个清单通常包含定义好的测试用例。测试用例主要由开发人员和设计人员定义,测试人员需要执行这些用例。我们将在后面的章节中详细讨论测试。

总结

任何软件开发都必须遵循一定的协议和标准。游戏开发也不例外。遵循标准有助于产品维持更长时间。现代安卓游戏的生命周期包括推出后的许多更新,在许多情况下,游戏可以持续多年。对于一个组织来说,同一个开发人员可能长时间不在同一个游戏上工作,这在游戏行业是非常常见的情况。

开发项目必须有足够的可读性,以便被新开发人员采用,并且足够灵活,以适应游戏更新的新变化。

最后,我们总结一下在安卓游戏开发行业常见的强制任务。游戏开发者应该遵循游戏开发原则。首先,他们必须创建一个适当的游戏设计文档,使程序员和艺术家容易理解清楚。然后,他们应该创建一个适当的技术设计文档,为程序员和游戏工程师提供所有可能的技术信息。组织中的特定开发过程定义并维护开发标准。程序员必须在模块中编写代码,以避免将来的更改,并提高代码的可重用性。适当的命名约定总是有助于更好地理解代码,并为易于编辑和重用做好准备。

游戏开发人员制作游戏应该遵循的另一个实践是玩和享受很多游戏。