65.9K
CodeProject 正在变化。 阅读更多。
Home

2 合 1 设备的游戏设计方法

2014年11月6日

CPOL

14分钟阅读

viewsIcon

7149

在本文中,我们关注为 2 合 1 外形开发游戏和改进用户界面体验的重要性

引言

笔记本电脑和平板电脑在不同群体和人群中非常受欢迎,这主要是因为它们为用户提供了专业的体验。2 合 1 设备是从这两种成熟的计算外形演变而来的,它们在一个互补的平台上共存,结合了两种使用模式的优点以及更多。

在本文中,我们关注为 2 合 1 外形开发游戏和改进用户界面体验的重要性,其中包括:

  • 检测输入模式(触摸 vs. 键盘/鼠标)的切换
  • 预测模式(平板模式 vs. 翻盖模式)
  • 显示适当的用户界面

外形和用途

传统的笔记本电脑采用“翻盖式”外形,其特点是作为移动个人电脑——一种可以执行台式机上所有任务的设备,但却以一种移动、轻便、紧凑的方式。随着超极本的出现,笔记本电脑变得更轻、更薄、电池续航时间更长,同时在性能和功能方面取得了显著的进步。对于许多用户来说,笔记本电脑已成为他们首选的计算设备,因为它允许他们以移动性和灵活性带来的便利性来执行他们通常在台式机上需要的所有任务。

另一方面,平板电脑是移动技术的当前顶峰,采用“平板模式”输入,该模式依赖于手写识别、触摸屏键盘或外接键盘。平板电脑小巧、轻便、极其便携。然而,它们的处理能力不如笔记本电脑,作为计算设备的 it 功能有限。平板电脑非常适合休闲网页用户(阅读新闻或浏览热门网站)、玩“轻量级”游戏的用户,以及其他希望在旅行时观看电视或电影的用户。此外,平板电脑通常受到设计和音乐等创意艺术专业用户的青睐。[1]

双设备挑战

使用两台设备(一台笔记本电脑创建内容,一台平板电脑消费内容)的一个问题是,在具有不同操作系统和内容格式的设备之间共享内容的难度。2 合 1 设备的出现成功地弥合了这两种外形之间的差距,并在单一设备上提供了两者的便利性和一个操作系统。

图 1:计算设备演变

2 合 1 设备类型

市面上有各种各样的 2 合 1 设备。有些设备屏幕可以旋转,有些设备屏幕可以向后折叠 180°,还有一些设备屏幕可以完全拆卸。所有这些型号共有的一个关键功能是能够快速无缝地从功能齐全的超极本转换为方便的平板电脑,反之亦然。在这方面,设备可以处于两种模式之一:平板模式(类似于平板电脑的模式,主要输入方法是触摸)和翻盖模式(类似于笔记本电脑的模式,主要输入方法是键盘/鼠标/触摸板)。

图 2:市场上一些不同款式的 2 合 1 设备

在此类新设备上运行的任何软件都应能够识别外形并调整用户界面以适应设备状态的变化。例如,如果应用程序或系统软件检测到触摸输入,它应该自动提供屏幕键盘的选项。

为 2 合 1 设备适配游戏

游戏通常分为两类:(1)基于鼠标键盘/控制器的传统 PC 游戏或(2)基于触摸的移动游戏。由于 2 合 1 设备同时具备这两种能力,因此在用户从平板模式切换到翻盖模式再切换回来时,考虑游戏如何适应这一点非常重要。这种切换可能随时发生,甚至在游戏进行中。

2 合 1 游戏平台的特殊考虑

触摸模式

触摸是一种新的输入模式,传统游戏需要适应。在平板模式和翻盖模式下都可以使用触摸输入,但添加触摸界面并不一定意味着游戏必须更改其输入或游戏模式。相反,它可以用于增强游戏体验,因为触摸对于许多类型的游戏输入来说更直观。然而,在为游戏平台添加触摸支持时,有几点需要牢记。

用户界面 (UI) 设计

任何基于触摸的用户界面 (UI) 都应遵循平板电脑游戏设计指南。例如,按钮的大小和间距必须适合普通成年人的手指。同样重要的是,按钮和表单要对用户输入做出即时响应。请记住,当设备处于平板模式时,用户很可能双手握持设备。将 UI 控件元素设计在默认握持位置附近,可以舒适地使用和玩游戏,而无需单手平衡并在屏幕中间按下按钮。[2]

UI 无缝切换

专用的平板电脑或传统笔记本电脑与 2 合 1 设备之间的区别在于,用户可以决定从一种模式切换到另一种模式。当这种情况发生在游戏过程中时,必须检测外形的变化并为新模式提供理想的用户界面。

例如,游戏《Defense Grid: The Awakening》完美地实现了这种过渡。[3] 当游戏检测到触摸输入时,它会显示平板 UI。该 UI 包括屏幕右边缘靠近边框的易于选择的塔列,一个附近的选项/游戏菜单按钮,以及屏幕左下角的快进按钮。UI 元素放置在握持点附近,如上所述。当游戏检测到键盘、鼠标或触摸板输入时,平板 UI 元素会淡出,并显示鼠标光标。这使得设备状态过渡非常流畅且不具侵入性。

图 4:检测到触摸输入时的平板模式 UI 元素
图 5:触摸 UI 元素消失,键盘/鼠标输入时出现光标

在某些系统上,可以通过 Windows* API 功能查询系统并确定设备状态(平板模式或翻盖模式)。但这并未在所有平台上实现,也不能保证在较旧的 2 合 1 系统上运行。

虽然不常见,但可能存在需要界面在用户提供输入之前更改的情况。如果用户关闭笔记本电脑并切换到平板模式,我们可能希望显示平板用户界面,而无需用户首先触摸屏幕。如果游戏处于一种模式,在这种模式下,疏忽的触摸可能会对用户的游戏产生不利影响,这一点很重要。尽管可以通过“特殊处理”键盘/鼠标使用后的第一次触摸输入(仅作为模式更改指示器,而非实际游戏更新输入)来克服这一因素,但人们可以理解希望自动获得状态更改通知的愿望。

GetSystemMetrics 是用于查询设备状态的 Windows API。[4] 相关指标是 SM_CONVERTIBLESLATEMODESM_SYSTEMDOCKED。查询 SM_CONVERTIBLESLATEMODE 可以告诉我们是否处于平板模式或非平板模式(即翻盖模式)。[5]

	bool bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0);
代码段 1:请勿使用!此 API 可能在某些系统上返回不正确的状态。见下文。

当此系统指标更改时,系统会通过 WM_SETTINGCHANGE 消息发送广播消息,其中 LPARAM 包含“ConvertibleSlateMode”。

case WM_SETTINGCHANGE:
	if(wcscmp(TEXT("ConvertibleSlateMode"), (TCHAR *) lParam) == 0)
NotifySlateModeChange();
	break;
代码段 2:使用此机制代替。保证仅在真实模式更改时广播。

请记住,此功能可能在某些系统上不可用。应用程序无法轻易检测到此 API 查询功能。这意味着 GetSystemMetrics() 调用可能会返回错误的状态。在较旧的设备上,这可能返回 0,表示平板模式,而实际上设备处于翻盖模式。

但是,带有 LPARAM 值“ConvertibleSlateMode”或“SystemDockMode”的 WM_SETTINGCHANGE 广播消息仅在支持此功能时才会发生。如果游戏检测到这些消息,就可以正确地向用户呈现所需的 UI。由于此功能并非一直受支持,因此很重要的一点是,将界面更改触发基于检测到的用户输入模式更改(触摸 vs. 键盘)作为一种安全机制。

屏幕键盘

在某些情况下可能没有物理键盘。如果游戏需要文本输入,那么支持屏幕键盘就变得很重要。

如果您的游戏在窗口中运行,用户可以从任务栏手动调用触摸键盘,但这不直观,对全屏游戏毫无帮助。您可以在游戏内编写自定义键盘覆盖。这种方法可能具有挑战性,但可能为用户提供最佳体验。

图 6:固定大小和位置的屏幕键盘
图 7:可移动和缩放的屏幕键盘

下面的代码示例链接展示了如何在 DirectX 游戏中调出 Windows 屏幕键盘:https://software.intel.com/en-us/blogs/2013/06/11/touch-keyboard-access-for-windows-8-desktop-apps [6] 这种方法要求您的游戏以无边框窗口全屏模式运行。许多桌面游戏将使用独占全屏模式编写。这在使用内置键盘时存在问题;调用的键盘将被隐藏,或者调出键盘会迫使游戏退出全屏模式。进入/退出独占全屏模式会带来大量资源重新获取或重新调整大小的考虑因素,并且通常是您不希望添加到键盘输入处理中的痛点。此示例中演示的解决方案是让游戏在最大化的无边框窗口中运行,而不是独占全屏模式。优点是调出键盘窗口不会干扰游戏,除了暂时将其推到 z 堆栈下方一层。游戏继续在后台运行以处理键盘输入,并在键盘关闭后自动重新获得焦点。

自动旋转/方向锁定

所有 2 合 1 设备都配备了各种传感器。其中一个好处是自动旋转功能。在平板模式下,设备可以纵向或横向使用。如果启用了自动旋转,基于 DirectX 的游戏将丢失其 D3D 设备,并且必须使用新的分辨率重新创建设备,该分辨率由方向更改决定。例如,全屏尺寸可能从 1600x900 更改为 900x1600。这通常不是全屏游戏所希望的。对于现代基于 UI 的 Windows 应用程序,这很容易通过在应用程序清单中指定方向首选项来修复。但是,对于桌面游戏,我们仍然可以通过直接查找并调用 user32.dll 中的导出函数来获得此功能。然后可以使用此函数通过指定游戏的方位首选项来禁用自动旋转。[7]

typedef enum ORIENTATION_PREFERENCE
{
    ORIENTATION_PREFERENCE_NONE              = 0x0,   
    ORIENTATION_PREFERENCE_LANDSCAPE         = 0x1,   
    ORIENTATION_PREFERENCE_PORTRAIT          = 0x2,   
    ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,   
    ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED  = 0x8
} ORIENTATION_PREFERENCE; 

typedef BOOL (WINAPI *pSDARP)(ORIENTATION_PREFERENCE orientation);

pSDARP pARP;

pARP = (pSDARP) GetProcAddress( GetModuleHandle(TEXT("user32.dll")),
				    "SetDisplayAutoRotationPreferences" );

if( pARP )
{
    pARP( (ORIENTATION_PREFERENCE)(ORIENTATION_PREFERENCE_LANDSCAPE |
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED) );
}
代码段 3:用于禁用自动旋转并将方向限制为纵向的代码片段。

基于触摸的手势

基于触摸的手势使游戏元素更直观。根据游戏玩法,触摸输入可能比键盘或鼠标更直观。在实时战略游戏中,触摸允许玩家进行套索手势来选择单位。然后可以通过触摸迷你地图或通过捏合放大主地图并选择最初不在视图范围内的区域来命令这些单位到达目标区域。此外,使用 RTS 场景,用户可以选择单位并沿屏幕绘制一条特殊路径,供单位用作巡逻路径。这些命令很难用传统输入系统可视化和实现,但在触摸模式下操作自然。

图 8:《文明 V》添加了触摸控件,以提供流畅的触摸游戏体验。

 

多指触摸在简单界面中增加了许多命令。例如,《文明 V》实现了以下触摸控件 [8]

  • 捏合 - 放大和缩小相机
  • 拖动 - 提供有关单位或手指悬停在地形的信息
  • 双指滚动/平移 - 向上/向下或向左/向右移动相机
  • 点击 - 选择单位
  • 双击 - 向选定单位发出移动命令
  • 双指点击 - 在不发出命令的情况下退出当前命令
  • 三指点击 - 关闭打开的菜单或打开游戏菜单

由于翻盖模式下也支持触摸,因此这些新手势增强了传统界面,并提供了增强的用户体验。

触摸 API 选择

在 Microsoft Windows 8 桌面应用程序中,有三种方法可以支持触摸输入和手势:使用 WM_POINTERWM_GESTUREWM_TOUCH 消息。[9]

  • WM_POINTER 代码最简单,支持最丰富的手势集,但仅在 Windows 8+ 上运行。
  • WM_GESTURE 代码简单,并且向后兼容 Windows 7,但有一些手势限制。
  • WM_TOUCH 也向后兼容 Windows 7,但需要大量代码,因为您必须自己从低级触摸事件编写手势和操作识别器。

根据您想要的抽象级别,您可能更喜欢 WM_POINTERWM_GESTURE 的完整控制,尽管这需要更多代码。如果您可以接受它的限制,WM_GESTURE 可能适合您。

图 9:比较各种 Windows 触摸 API

这是一个代码示例链接,演示了如何使用 WM_GESTUREWM_TOUCH API 将触摸集成到应用程序中:https://software.intel.com/en-us/vcsource/samples/windows-7-touch [10]

Unity 3D 中的打包

Unity 3D 引擎的某些版本在 Windows 7 和 Windows 8 桌面模式下运行的应用程序中不处理触摸消息。尽管 Unity 引擎本身不处理触摸消息,但可以通过插件注册 Unity 窗口以进行触摸。诀窍是创建一个使用各种 Windows API 来拦截发送到应用程序的触摸消息的插件。一旦窗口注册,插件就可以在 Unity 应用程序的脚本中访问触摸消息。此触摸插件的代码示例可以在此处找到:https://software.intel.com/en-us/articles/adding-multi-touch-support-to-unity-games-on-microsoft-windows-7-and-windows-8-desktop [11]

输入设备延迟比较

图 10:对导致触摸响应延迟的整个硬件和软件堆栈的概述

端到端延迟可能在 50-100ms 之间,具体取决于设备,但这在触摸设备中不断改进 [12]。此延迟是从触摸输入识别到屏幕上显示效果所需的时间。这与传统的基于鼠标或触摸板的输入非常相似。传统鼠标的硬件延迟约为 8ms,并且您仍然需要加上软件堆栈延迟。

如果游戏依赖于灵巧的游戏玩法,触摸将不是一个好的选择。但它仍然可以用于增强普通控件的游戏玩法。

配套应用模式

即使主游戏依赖于灵巧的游戏玩法,并且不适合在平板电脑上进行触摸式游戏,游戏也可能包含适合纯触摸模式的元素。游戏玩法可能涉及规划和角色定制、查看和发布保存状态和重播、在朋友玩比赛时观看和社交互动、整理库存、排序任务等。其中大多数游戏元素在触摸屏/平板电脑外形上可能更令人愉悦。

提取这些游戏元素并添加一个可以在平板模式下享受的配套应用程序,可以为用户提供全面的使用体验。

其他需要考虑的方面

教程或游戏内帮助对话框应参考正确的模式(触摸/键盘/控制器),具体取决于当前使用的模式。如果可能,最好同时显示触摸和键盘/鼠标信息,这样用户就可以从一种模式切换到另一种模式,而无需返回搜索控件。

添加玩家在触摸模式下可以获得的独特成就将增加玩家的体验,并鼓励传统玩家尝试触摸暴露的新游戏元素。

参考文献

[1] 笔记本电脑与平板电脑:优缺点:http://www.lenovo.com/us/en/faqs/laptop-vs-tablet/

[2] Windows 触摸交互:http://msdn.microsoft.com/en-us/library/windows/apps/hh465415.aspx

[3] 为《Defense Grid: The Awakening》创建一流的触摸界面:https://software.intel.com/en-us/articles/creating-a-first-class-touch-interface-for-defense-grid-the-awakening

[4] Windows API 库:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx

[5] 检测 2 合 1 设备中的平板/翻盖模式和屏幕方向:https://software.intel.com/en-us/articles/detecting-slateclamshell-mode-screen-orientation-in-convertible-pc

[6] Windows* 8 桌面应用程序的触摸键盘访问:https://software.intel.com/en-us/blogs/2013/06/11/touch-keyboard-access-for-windows-8-desktop-apps

[7] 在应用程序中处理 Windows 8 自动旋转功能:https://software.intel.com/en-us/blogs/2013/01/10/handling-windows-8-auto-rotate-feature-in-your-application

[8] 游戏巨头的新平台——Firaxis 通过优化《文明 V*》以适应触摸屏 Ultrabook™ 设备,进军移动领域:http://www.intel.com/content/www/us/en/gaming/firaxis-civ-v.html

[9] 比较触摸编码技术——Windows 8 桌面触摸示例:https://software.intel.com/en-us/articles/comparing-touch-coding-techniques-windows-8-desktop-touch-sample

[10] Windows 桌面触摸:https://software.intel.com/en-us/vcsource/samples/windows-7-touch

[11] 为 Microsoft Windows* 7 和 Windows* 8 桌面上的 Unity* 游戏添加多点触摸支持:https://software.intel.com/en-us/articles/adding-multi-touch-support-to-unity-games-on-microsoft-windows-7-and-windows-8-desktop

[12] Windows* 应用程序的触摸响应测量、分析和优化:https://software.intel.com/en-us/articles/touch-response-measurement-analysis-and-optimization-for-windows-applications

Intel® Developer Zone 提供跨平台应用开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发人员创新并取得成功。加入我们的社区,了解 物联网Android*Intel® RealSense™ TechnologyWindows*,下载工具、访问开发套件、与志同道合的开发人员分享想法,并参与黑客马拉松、竞赛、路演和本地活动。

© . All rights reserved.