游戏的安装和维护
本文介绍了一组最佳做法,可以帮助减少用户对安装游戏所需时间的沮丧,防止不必要的支持呼叫,并允许用户尽可能快速、轻松地开始玩游戏。
初始安装
用户购买游戏是因为喜欢玩游戏,而不是因为喜欢安装游戏。 对于终端用户来说,安装游戏应该尽可能快速、简单、很轻松。 理想情况下,最终用户甚至不应该看到安装 UI;他们只需将游戏光盘放入托盘中,就可以开始玩游戏。
简化安装 UI
现有游戏安装 UI 的常见方面会干扰所需的最终用户体验:
向用户提出不必要的问题。
例如,许多游戏会询问用户是否要安装 DirectX。 如果游戏需要 Microsoft DirectX 才能运行,但尚未安装正确版本的 DirectX,则游戏只需安装 DirectX 即可。
向用户提出绝大多数用户都会以相同方式回答的问题。
对于普通用户来说,安装路径、“开始”菜单位置等的默认设置都可以。 为想要更改这些设置的用户提供高级选项。
安装 UI 应该设计成允许普通用户尽快开始玩游戏。 如果在用户的计算机上启用了“自动运行”(默认值),安装程序应假定用户希望尽快玩游戏,从而绕过任何不必要的问题。 安装程序应开始将游戏安装到默认安装路径,最好使用按需安装中所述的设置。 在自动启动安装之前,最好让用户有机会更改安装设置。 但是,这应该通过提示用户按下高级设置选项的键来实现;如果用户在五到十秒内没有按下该键,则自动继续使用默认选项。
如果未在用户的计算机上启用“自动运行”,则安装程序应假定用户不希望安装程序自动开始安装游戏。 如果安装程序是通过“自动运行”以外的其他方式启动的,则应启动高级设置 UI。
缩短安装所需的时间
如今,大多数 Microsoft Windows 游戏需要五分钟到半个小时即可完成安装过程。 相比之下,大多数主机游戏从用户插入游戏 CD 到用户可以玩游戏的时间不超过 30 秒。 这种差异是由于大多数 Windows 游戏被设计为从计算机的硬盘中运行大部分(如果不是全部)内容这一事实造成的:控制台缺乏永久存储大量内容的地方,因此需要从源媒体运行内容。 虽然从本地硬盘加载内容可以加快游戏内加载时间,但缺点是,所有内容都必须在某个时候从源媒体复制到硬盘。 作为安装过程的一部分,大多数 Windows 游戏选择一次将所有内容复制到硬盘上。 这会让用户在玩游戏之前观看进度条几分钟,从而降低用户对游戏的初始体验。
有两种方法可用于最大程度地减少最初安装游戏所用的时间:最小安装和按需安装。
最小安装
在最小安装方案中,游戏只会在硬盘上安装最基本的内容集。 通常,这仅由游戏可执行文件和 DLL 组成。 其余内容直接从源媒体访问。 这大大减少了安装所需的时间,因为游戏的可执行文件很少大于 10-20 MB。 缺点是游戏在游戏过程中加载内容需要更长的时间,因为它必须从较慢的源媒体加载内容。
若要在基于 Windows Installer 的安装程序中创建最小安装配置,请执行以下操作:
将要安装到硬盘驱动器的所有组件分组到标记为本地安装的功能中。
此功能将称为“Bootstrap”功能。
将要从源媒体运行的所有组件分组到标记为“从源运行”的功能中。
打开源媒体上可能存在的文件时,请使用 MsiGetComponentPath 函数确定文件的路径,而不是对路径进行硬编码。
这样做可确保即使用户的 CD/DVD 驱动器的驱动器号发生更改,也能找到该文件。
压缩保留在 CD/DVD 上的内容。
解压缩内容所花费的 CPU 时间通常会被 CD/DVD 驱动器缓慢的数据传输速率所掩盖。
将内容分组到连续的大文件中,并按顺序访问。
与硬盘驱动器相比,CD/DVD 驱动器的寻道时间非常糟糕,除非它们正在读取一个大的连续文件,否则大多数 CD/DVD 驱动器不会达到峰值传输速率。
按照可能被访问的顺序排列 CD/DVD 上的内容。
当文件以与磁盘布局相同的顺序访问时,寻道时间大大减少。
按需安装
在按需安装方案中,对于最小安装,游戏最初只会将启动游戏所需的文件安装到硬盘上。 然而,游戏并不是每次需要时都从源媒体访问剩余内容,而是在第一次需要时将每条内容安装到硬盘上,然后在每次后续使用时从本地硬盘访问。 初始安装所需的时间与最小安装一样短,但在第一次访问每个内容后,加载时间会缩短。
要在基于 Windows Installer 的安装程序中创建按需安装配置,请执行以下操作:
将最初要安装到硬盘驱动器的所有组件分组到标记为本地安装的功能中。
请注意,这与 Bootstrap 功能完全相同,只需进行最小安装。
根据可能一起使用的组件,将剩余内容分组为多个功能。
例如,在基于关卡的游戏中,将给定关卡上使用的所有内容组合成一个功能。 请注意,Windows Installer 允许多个功能共享一个组件;因此,如果你有在多个级别上使用的内容,则可以将该内容添加到所有必要级别的功能中,而无需复制该内容。 所有这些功能都应标记为“播发”,这意味着它们最初不会安装,但可以根据需要稍后安装。
当需要某个文件时,首先使用函数 MsiQueryFeatureState 检查文件是否已安装。
如果尚未安装(即其状态为 INSTALLSTATE_ADVERTISED),请调用函数 MsiConfigureFeature 在本地安装该功能。 安装后打开文件时,调用 MsiGetComponentPath 以确定文件的路径。 虽然对于这种方案来说不是绝对必要的(因为内容在使用之前总是会安装到硬盘上),但这使得除了按需安装外,还可以更容易地支持最小安装。
如果可能的话,预测可能很快需要什么内容,并在空闲时间在后台安装。
当游戏处于不需要电脑性能的状态时,后台安装最合适;例如,在显示介绍电影、过场动画、菜单等内容时。
在游戏的选项菜单中创建一个选项,以强制安装所有剩余内容。
要实现这一点,请创建一个功能,该功能是所有按需安装功能的父功能,然后调用 MsiConfigureFeature 在本地安装此主功能。 这将导致子功能也在本地安装。
内容布局应该类似于最小安装的布局,除了内容应该只与可能同时需要的其他内容聚集在一起(例如,一个级别的所有内容应该在一起)。
安装后玩游戏
AutoRun
要玩已安装的游戏,用户只需将安装光盘放入驱动器托盘即可。 光盘上的自动运行可执行文件应该做的第一件事是检查游戏是否已安装;如果已安装,则启动游戏。 假设游戏是使用基于 Windows Installer 的安装程序安装的,则检查以确定是否可以通过对函数 MsiQueryProductState 的单个调用来完成游戏安装。
将按需安装转换为完全安装
虽然按需安装允许用户比完全安装更快地开始玩游戏,但用户可能希望明确地将剩余的游戏内容安装到本地硬盘。 用户可能希望能够在不需要源媒体的情况下玩游戏,或者可能只是想避免因按需安装内容而导致的游戏内加载时间更长。 如果游戏的设置使用 Windows Installer,游戏可以在游戏内选项 UI 中提供一个选项来完成剩余内容的安装。 当用户选择此选项时,游戏可以调用 MsiConfigureFeature 以强制在本地安装剩余功能;无需生成单独的安装应用程序即可执行此操作。
维护游戏软件和内容
Windows 游戏相对于主机游戏的优势之一是发布者在游戏初始发布后可以相对轻松地发布更新。 无论这些更新是引入新内容还是只是修复错误,重要的是要使更新过程对最终用户尽可能简单。 更新过程对于在线游戏来说更为重要,因为在线游戏通常要求所有用户都运行最新版本的游戏才能连接。
自动检查更新
用户不必记得去查找修补程序。 如果游戏有可用的更新,至少应该通知用户,理想情况下,修补程序应该已经下载。
游戏检查更新的一种简单方法是使用特定 URL 连接到发布者托管的 Web 服务器,并下载一个文本文件,该文件指定游戏的最新可用版本的版本号,以及从中下载将游戏更新到最新版本的包的 URL。
每次用户玩游戏时检查更新足以确保用户运行的是最新版本。 然而,如果在用户尝试玩游戏之前立即发现新更新的存在,则用户可能会被迫延迟玩游戏,直到更新完成下载。 对于大型更新或慢速连接,此延迟可能在几个小时左右。 为了避免强迫用户在玩游戏之前等待,游戏可以使用任务计划程序来安排对新更新的定期检查。 如果检测到更新,游戏可以立即开始下载更新,以便在用户下次玩游戏时完全下载并准备安装。
自动下载修补程序
一旦游戏检测到有新的更新可用,应该立即开始下载更新。 由于检查更新的任务通常在后台以无提示方式运行,因此下载需要尽可能不显眼。 后台智能传送服务 (BITS) 是一项操作系统功能,即使应用程序本身未运行,它也允许应用程序从 Internet 下载文件。 BITS 下载作业仅在用户登录时运行,并且仅当计算机已连接到网络时运行。 BITS 不会尝试强制计算机自行连接到网络。 如果用户与网络断开连接或注销,BITS 作业将暂停,并且将在用户下次登录并连接到网络时恢复下载。 应用程序可以将 BITS 作业配置为仅使用其他未使用的网络带宽,以防止作业影响可能正在使用网络的任何其他应用程序(例如在线游戏)的性能。 BITS 在 Windows XP 和 Windows 2000 Service Pack 3 上可用。
其他资源
有关本文中引用的技术的详细信息,请参阅以下主题:
有关将 Windows Installer 用于游戏的详细信息,请收听下个月的 Driving DirectX 专栏“面向游戏开发人员的 Windows Installer 简介”。