Quantcast
Channel: Sensors
Viewing all 82 articles
Browse latest View live

Krita* Gemini* - 设备合二为一,性能同样卓著

$
0
0

Download PDF

为何选择二合一设备

二合一设备是一种可在笔记本电脑和平板电脑之间进行切换的 PC。 笔记本电脑模式(有时被称为台式机模式)支持将键盘和鼠标作为主要输入设备。 平板电脑模式依赖于触摸屏进行输入,因此需要手指或手写笔交互。 二合一设备(如英特尔® 超极本™ PC/平板二合一等)提供了多种精确、可控的输入选项,通过写入和触摸两种输入方式让您工作、娱乐两不误。

开发人员在修改应用时必须考虑到多个场景,才能充分利用这种新型的可变形电脑。 有些应用可能希望两种模式下的菜单和外观保持几乎相同。 而其它应用,如 Krita Gemini for Windows* 8 (参考资料 1)等,则希望慎重选择重点内容,并确保可同时应用于两种用户界面模式。 Krita 是一款素描与绘画程序,专为创建数字格式的全新绘画文件提供端到端解决方案(参考文献 2)。 本文将探讨 Krita 开发人员如何在应用中添加二合一模式感知功能,包括同时实施自动和用户自选模式切换等,以及开发人员在创建应用以便为其应用提供二合一体验时应考虑的几个方面。

简介

多年以来,计算机已经使用了多种输入方式,其中包括打孔卡、命令行和点击等。 自触摸屏推出之后,我们现在可以使用鼠标、手写笔或手指来进行点击输入。 然而,我们中的大多数人并不打算通过触摸完成所有输入操作,而借助模式感知型应用(如 Krita Gemini 等),我们无需这么做。 二合一设备(如英特尔® 超极本™ PC/平板二合一等)能够提供合适的用户界面模式,让用户在一台设备上享受到最佳的用户体验。

有多种方法可以实现二合一设备在笔记本和平板两种模式之间的来回切换(图 1 和图 2)。 英特尔网站上列举了更多二合一设备的例子(参考资料 3)。 通过分离屏幕与键盘,或者禁用键盘并将屏幕作为主输入设备(如将屏幕叠放在键盘上面等),计算机可以从笔记本模式切换至平板模式。 电脑制造商也都开始向操作系统提供这种硬件切换信息。 Windows* 8 API 事件、WM_SETTINGCHANGE 和“ConvertibleSlateMode”文本参数通过发送信号自动执行模式切换。 此外,为方便用户使用,开发人员也可添加手动模式切换按钮。

正如二合一设备可以采用多种方法在笔记本和平板模式之间进行切换一样,软件也可以有不同的切换响应方式。 在某些情况下,软件可能希望使用户界面尽可能接近笔记本电脑模式;而在其他情况下,您可能希望用户界面做出更多重要改变。 英特尔通过与众多厂商通力协作,帮助他们在其应用中添加二合一感知功能。 英特尔帮助 KO GmBH 将其 Krita Touch 应用的功能与其颇受欢迎的 Krita 开源绘画程序(笔记本电脑应用)融入全新 Krita Gemini 应用中。 Krita 项目是一个活跃的开发社区,社区成员乐于欢迎新创意和维护质量支持。 该团队添加了所需的相关机制,以支持笔记本电脑“鼠标与键盘”模式与平板电脑触摸界面模式之间的无缝切换。 观看图 3 短片中演示的 Krita Gemini 用户界面 (UI) 切换步骤。


图 3:视频 — Krita Gemini 用户界面切换—单击图标以运行

在平板电脑模式下创建,在笔记本电脑模式下完善

Gemini 团队致力于最大限度地提升两种操作模式下的用户体验。 在图 4 和图 5 中,您可以看到,在两种模式之间切换用户界面的方法有很多种,且每一种都足够出色。 借助这些方法,用户可以在平板电脑模式下“现场”作画,之后切换到笔记本电脑模式对细节进行润色和修改。


图 4:Krita Gemini 平板电脑用户界面


图 5: Krita Gemini 笔记本电脑用户界面

要使应用可在两种操作模式之间自由切换,需要执行三个主要步骤。

第一步,应用必需能够感知触摸。 幸运的是,触摸感知功能通常在二合一设备执行操作之前就已开启。 通常,这一步骤比执行模式切换重要的多。 英特尔发表了几篇关于为 Windows 8 应用添加触摸输入的文章(参考资料 4)。

第二步,添加二合一设备感知功能。 上述视频的前半部分(图 3)演示了自动传感器激活切换模式,在此例中即为旋转操作(图 6)。 后半部分演示了通过应用中的一个按钮执行的用户发起的切换模式(图 7)。


图 6:传感器状态激活的二合一设备模式切换


图 7:“切换到草图”切换按钮 — 用户发起从笔记本模式切换至平板模式的操作

自动切换支持需要定义和监控传感器状态,并在获悉状态之后执行适当的操作。 此外,如果在代码支持笔记本电脑模式的情况下,用户希望切换至平板电脑模式,那么应用也应默认支持用户发起模式切换 3。 您还可以参考英特尔文章《如何编写二合一设备感知应用》中的示例方法来添加基于传感器的切换方法(参考资料 5)。 您也可以搜索“SlateMode”,从其源代码中中找到 Krita 的模式切换管理代码(参考资料 6)。 Krita 遵守 GNU 公共许可发布。 请参考源代码库获取最新信息(参考资料 7)。

// Snip from Gemini - Define 2-in1 mode hardware states:

#ifdef Q_OS_WIN
#include <shellapi.h>
#define SM_CONVERTIBLESLATEMODE 0x2003
#define SM_SYSTEMDOCKED 0x2004
#endif

并非所有的触屏电脑均提供自动切换功能,因此,我们建议您参照本文列举的 Krita Gemini 团队的做法进行操作,通过在您的应用中添加一个按钮来支持用户手动发起模式切换。 Gemini 的按钮如图 7 中所示。按钮发起的用户界面切换执行与机械传感器发起的切换相同的功能。 屏幕信息和默认输入设备将从平板电脑模式下的触摸和大图标切换到笔记本电脑模式下的鼠标和小图标。 然而,由于传感器路径不存在,因此,按钮方法必须在没有传感器状态信息的情况下执行屏幕、图标和默认输入设备切换。 因此,开发人员应该为用户提供一种模式切换路径,且为防用户选择不恰当的模式,该路径需在没有按钮发起用户界面状态信息的情况下支持触摸或鼠标输入。

按钮定义 — Kaction() — 及其状态和操作如下述代码中所示(参考资料 6):

// Snip from Gemini - Define 2-in1 Mode Transition Button:

         toDesktop = new KAction(q);
         toDesktop->setEnabled(false);
         toDesktop->setText(tr("Switch to Desktop"));
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchDesktopForced()));
         connect(toDesktop,
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchToDesktop()));
sketchView->engine()->rootContext()->setContextProperty("switchToDesktop
sketchView->Action", toDesktop);

然后,工程师承担处理由按钮触发的事件的任务。 由于代码不能假定该系统就是二合一系统,因此首先要检查系统的最后一个已知状态,然后更改模式。 (参考资料 6):

// Snip from Gemini - Perform 2-in1 Mode Transition via Button:

#ifdef Q_OS_WIN
bool MainWindow::winEvent( MSG * message, long * result ) {
     if (message && message->message == WM_SETTINGCHANGE && message->lParam)
     {
         if (wcscmp(TEXT("ConvertibleSlateMode"), (TCHAR *) message->lParam) == 0)
             d->notifySlateModeChange();
         else if (wcscmp(TEXT("SystemDockMode"), (TCHAR *) 
message->lParam) == 0)
             d->notifyDockingModeChange();
         *result = 0;
         return true;
     }
     return false;
}
#endif

void MainWindow::Private::notifySlateModeChange()
{
#ifdef Q_OS_WIN
     bool bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0);

     if (slateMode != bSlateMode)
     {
         slateMode = bSlateMode;
         emit q->slateModeChanged();
         if (forceSketch || (slateMode && !forceDesktop))
         {
             if (!toSketch || (toSketch && toSketch->isEnabled()))
                 q->switchToSketch();
         }
         else
         {
                 q->switchToDesktop();
         }
         //qDebug() << "Slate mode is now"<< slateMode;
     }
#endif
}

void MainWindow::Private::notifyDockingModeChange()
{
#ifdef Q_OS_WIN
     bool bDocked = (GetSystemMetrics(SM_SYSTEMDOCKED) != 0);

     if (docked != bDocked)
     {
         docked = bDocked;
         //qDebug() << "Docking mode is now"<< docked;
     }
#endif
}

第三步,解决测试过程中发现的问题。 虽然在触摸或鼠标模式下使用调色板相当容易,但工作区本身需要确保对焦和变焦与用户的期望保持一致。 因此,让一切变大的方法并不可取。 在平板电脑模式下,控件会变大以适应触摸交互,但屏幕图像本身需要在不同层面进行管理,以保持预期的用户体验。 请注意,在图 3 所示的视频中,在进行模式切换之后,编辑窗格中的图像与在其屏幕上时的尺寸保持相同。 开发人员通过创造性的解决方案预留了屏幕上的这一固定区域,以确保图像的一致。 另一个问题是,最初的解决方案旨在使两种用户界面均可正常运行,这反而影响了性能,因为两个用户界面共享相同的图形资源。 之后开发人员对两种用户界面进行了调整,以确保所分配的资源尽可能满足不同的需求,并尽可能优先满足活跃的用户界面。

总结

正如您所看到的,为您的应用添加二合一模式感知功能是一个非常简单的过程。 您需要了解您的用户如何在两种交互模式中与您的应用进行交互。 请阅读《为基于超极本™ 设计的二合一设备编写切换应用》的英特尔文章,了解有关应用创建和用户界面切换的更多信息(参考资料 8)。 Krita Gemini 开发这一应用的目的在于,通过在平板电脑模式下创作草图并在笔记本电脑模式下最后润色,让艺术创作变得简单。 在您向用户展示您的应用在平板和笔记本模式下的运行状况时,您可以突出显示什么内容?

参考资料

  1. Krita Gemini General Information
  2. Krita Gemini executable download (scroll to Krita Gemini link)
  3. Intel.com 2 in 1 information page
  4. Intel Article: Mixing Stylus and Touch Input on Windows* 8 by Meghana Rao
  5. Intel Article: How to Write a 2-in-1 Aware Application by Stephan Rogers
  6. Krita Gemini mode transition source code download
  7. KO GmbH Krita Gemini source code and license repository
  8. Intel® Developer Forum 2013 Presentation by Meghana Rao (pdf) - Write Transformational Applications for 2 in 1 Devices Based on Ultrabook™ Designs
  9. Krita 2 in 1 UI Change Video on IDZ or YouTube*

关于作者

Tim Duncan 是一名英特尔工程师,被朋友们形容为“小工具先生”。 他目前正在帮助开发人员将技术集成至解决方案,Tim 拥有数十年的丰富的行业经验,从芯片制造到系统集成均有涉猎。 在英特尔® 开发人员专区中搜索Tim Duncan (Intel),了解他的详细信息

 

英特尔和 Intel 标识是英特尔在美国和/或其他国家的商标。
版权所有 © 2013-2014 年英特尔公司。 所有权保留。
*其他的名称和品牌可能是其他所有者的资产。

Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
Copyright © 2013-2014 Intel Corporation. All rights reserved.
*Other names and brands may be claimed as the property of others.

 

  • 2 in 1
  • Krita Gemini
  • Developers
  • Microsoft Windows* (XP, Vista, 7)
  • Microsoft Windows* 8
  • UX
  • Windows*
  • Game Development
  • Graphics
  • Sensors
  • Touch Interfaces
  • User Experience and Design
  • Laptop
  • Tablet
  • URL

  • Gameplay: 触摸控制您最热衷的游戏

    $
    0
    0

    下载原文

    Download Gameplay: Touch controls and 2-in-1 awareness for your favorite games [PDF 904KB]

    GestureWorks Gameplay是实现与流行电脑游戏互动的革命性新方法。 Windows 8 Gameplay 软件可让游戏玩家使用和创建他们自己的触摸虚拟控制器,覆盖于现有电脑游戏之上。 每一虚拟控制器覆盖添加了按钮、手势和其他控制,可映射为游戏已理解的输入。 另外,玩家可使用上百种个性化手势在屏幕上互动。 Ideum 与英特尔的合作让他们可访问技术与工程资源,在 Gameplay 中实现触摸覆盖。

    观看 1 分钟视频,了解 Gameplay 概念。

    虚拟控制器

    与传统游戏控制器不同,虚拟控制器可完全定制,玩家还能与朋友分享其虚拟控制器。 Gameplay 可在 Windows 8 平板电脑超极本二合一电脑一体机,甚至迷你触控本和大型触摸屏上运行。


    图 1 - Gameplay 运行于基于英特尔凌动处理器的平板电脑中

    Ideum 首席执行官和 GestureWorks Gameplay 制作者 Jim Spadaccini 表示:“虚拟控制器是真实的! Gameplay 扩展了上百种无法触摸的电脑游戏,使它们可以在全新一代便携式设备上运行。 相比物理控制器,Gameplay 的虚拟控制器更好,可支持定制和编辑。 我们迫不及待想看玩家如何使用 Gameplay 大展拳脚。”


    图 2 - Gameplay 主屏幕

    面向流行 Windows 游戏的几十种预建虚拟控制器都带有 GestureWorks Gameplay (现有超过 116 款)。 Gameplay 让用户不仅可以配置、布局,还能定制现有控制器。 该软件还包括易于使用的拖放编辑工具,支持用户为分布在 Steam 服务上的众多基于 Windows 的流行游戏创建虚拟控制器。


    图 3 - 虚拟控制器布局图

    用户可将操纵杆、 D-pad、交换器、滚轮和按钮置于屏幕任一位置,变换大小和暗度,还可添加颜色和标签。 而且,用户还可创建多个布局图,随时在游戏中切换。 这一功能支持用户根据不同游戏活动创建独特的视图,例如角色扮演游戏中的格斗与物件管理功能。


    图 4 - 虚拟控制器布局图

    借助 GestureWorks 手势处理引擎(又名 GestureWorks Core),Gameplay 可为超过 200 种世界通用手势提供支持。 基本世界通用手势(例如轻叩、拖、收缩/缩放,以及旋转)都是默认支持,也可定制。 这支持了覆盖触摸控制器的扩展,允许玩家访问多点触摸手势,为电脑游戏提供额外控制。 例如,在第一人称设计游戏中,简单的手势与按钮就可激活某些打斗招式。 Gameplay 甚至还包括试验性的加速器支持,这样您可倾斜您的超极本本™或平板电脑操纵竞速游戏的方向。当您将二合一设备切换至平板模式时,它可检测到这一变化,视需要打开虚拟控制器覆盖。

    开发过程中克服的挑战

    开发这种酷劲十足的产品并不容易,为了让 Gameplay 成为现实,需克服几个技术挑战。 有些挑战运用传统编程方法就可攻破,而有些挑战则需要更具创意的解决方案。

    2 合 1 转换支持

    Gameplay 开发早期,我们决定在一些新超极本上加入对于 2 合 1 转换(从翻盖模式到平板电脑模式)的基本支持。开发愿景为将这一支持如同正常开发工作一样,加入游戏之中,当游戏在翻盖模式下启动时,不显示覆盖层。游戏运行期间,如果系统转换至平板电脑模式,Gameplay 虚拟控制器覆盖层将会立即出现,支持通过触控进行游戏控制。您可在运行于支持 2 合 1 模式的任意超极本的虚拟控制器中看到这一功能。要激活此类支持,请在虚拟控制器编辑模式下,在设置选项卡的体验部分,启用 2 合 1 模式转换支持。Gameplay 开发早期,我们决定在一些新超极本上加入对于 2 合 1 转换(从翻盖模式到平板电脑模式)的基本支持。开发愿景为将这一支持如同正常开发工作一样,加入游戏之中,当游戏在翻盖模式下启动时,不显示覆盖层。游戏运行期间,如果系统转换至平板电脑模式,Gameplay 虚拟控制器覆盖层将会立即出现,支持通过触控进行游戏控制。您可在运行于支持 2 合 1 模式的任意超极本的虚拟控制器中看到这一功能。要激活此类支持,请在虚拟控制器编辑模式下,在设置选项卡的体验部分,启用 2 合 1 模式转换支持。


    5虚拟控制器设置视图

    .如欲了解关于如何检测 2 合 1 转换的更多信息,参考部分列出的示例应用可为您提供详尽指导。

    DLL 注入

    DLL 注入是一种通过加载外部动态链接库在另一程序的地址空间内执行代码的方法。 虽然 DLL 注入经常被外部程序用于不法企图,不过也有一些合法使用,包括以并非其作者最初预料或计划的方式扩展程序行为。 对于 Gameplay,我们需要一种方法将数据插入所玩程序(游戏)的输入线程中,以便触动输入可被转换成游戏理解的输入。 从大量 DLL 注入实施方法中, Ideum 选择使用 SetWindowsHookEx API 中的 Windows 挂钩呼叫。 最终,Ideum 从性能出发选择了进程特定挂钩而非全局挂钩。

    从第三方启动器启动游戏

    Ideum 探索了两种挂钩进入目标进程地址空间的方法。 应用可挂钩入正运行进程的地址空间,也可作为子进程启动目标可执行文件。 两种方法都没问题;然而,在实践中,当应用为目标进程的母程序时,监控和拦截目标进程创建的进程或线程则会容易得多。

    这对用户登录时启动的应用客户端(例如 Steam 和 UPlay)造成问题,因为 Windows 不为启动进程提供保证次序, Gameplay 进程必须在这些进程前启动以正确钩入覆盖控制。 Gameplay 通过在安装时安装一项轻量级系统服务解决了这一问题,该服务可监控用户登录时的启动应用。当某一相关客户端应用启动时,Gameplay 可作为母程序钩入这一进程,确保覆盖控制如期显示。

    经验总结

    鼠标过滤

    在开发过程中,发现一些游戏错误地处理触摸屏传来的虚拟鼠标输入。 这一问题在有着“鼠标外形”特征的第一人称射击游戏和角色扮演游戏中表现尤为突出。 该问题表现为从触控面板传来的鼠标输入对于显示屏上的一个点(因此在游戏环境中)不可覆盖。 这使得触摸屏就像“鼠标外形”设备一样几乎没有用。 最终解决方法就是拦截游戏的输入线程,过滤鼠标输入。 这一方法支持 Gameplay 通过屏幕上控制(例如面向“鼠标外形”功能的操纵杆)模仿鼠标输入。 尽管需要一段时间调试操纵杆反应性和盲区,感觉像鼠标一样,但一旦完成调试后,一切就变得完美了。 您可在 Fallout:新维加斯和上古卷轴:天际等游戏中 看到这种方法 的应用。

    触控游戏适用评估

    Ideum 花费了大量时间调整虚拟控制器以实现最佳的游戏设置。 游戏的几大元素决定了 Gameplay 的使用舒适度。 以下是几项通用指南,便于您了解哪些游戏与 Gameplay 的搭配最完美:

    • 不同游戏的 Gameplay 舒适性

    更好

    最好

    • 角色扮演游戏(RPG)
    • 模拟
    • 打斗
    • 体育
    • 竞赛
    • 拼图
    • 即时战略(RTS)
    • 第三人称射击
    • 平台游戏
    • Side Scrollers
    • 动作和冒险

    尽管舒适度是评估 Gameplay 适用性的一个重要方面,最重要的判定标准还是稳定性。 有些游戏在采用挂钩技术、输入注入或覆盖技术后将无法运行。 导致这种情况的原因有多个,最常见的原因是游戏自行监测内存空间或输入线程以检查篡改。 虽然 Gameplay 本身是完全合法的应用,但采用了一些也可被坏人利用的技术,所以很不幸,有些游戏对这些技术非常敏感,除非本身支持触控,否则根本无法运行。

    用户反馈

    尽管处于开发初期,Gameplay 1.0 还是获得了关于在电脑上玩触控游戏的一些有趣的用户反馈。 收到的用户反馈明显表达出了一些倾向。 总体来看,很明显,人们普遍希望能够为游戏定制触摸界面。 其他的反馈则主要集中在以下方面的个性化游戏体验:

    • 许多虚拟控制器不适合左撇子,用户在上手后很快就会在控制器中改过来。
    • 按钮大小和位置更改为最常见功能,所以 Ideum 正考虑在未来版本 Gameplay 中添加自动手掌大小调节功能。
    • 许多用户喜欢滚动触摸输入,而非不连续的触摸和释放交互。

    随着创建虚拟控制器的用户不断增多,我们期待更多的反馈。

    结论

    GestureWorks Gameplay 为你最热衷的游戏提供触摸控制。 这通过融合虚拟覆盖和额外交互支持(例如手势、加速器和 2-1转换)得以实现。 该项目实施过程中最有趣的部分就是用户反馈。 人们非常兴奋能在电脑上玩触摸式游戏,也非常开心能够继续享受许多以前以触摸形式玩的游戏。

    About the Authors

    Erik Niemeyer 现任英特尔公司软件与解决方案事业部的软件工程师。 过去 15 年来,Erik 一直致力于在英特尔微处理器上运行的应用的性能优化, 专攻全新 UI 开发和微架构调试。 业余时间里,Erik 喜欢爬山。 您可以发送电子邮件至 erik.a.niemeyer@intel.com 

    Chris Kirkpatrick 是英特尔软件与服务事业部的一名软件应用工程师,隶属虚拟与交互式计算工程小组,负责为移动平台上的英特尔图形解决方案提供支持。 他拥有俄勒冈州立大学计算机科学学士学位。 您可以发送电子邮件至chris.kirkpatrick@intel.com 

    资源

    https://gameplay.gestureworks.com/

    Related Articles

    How to Write a 2-In-1 Aware Application: /en-us/articles/how-to-write-a-2-in-1aware-application
    Krita Gemini Development of a 2-In-1 Aware Application with Dynamic UI for Laptop and Tablet Modes: /en-us/articles/krita-gemini-twice-as-nice-on-a-2-in-1
    Detecting 2 in 1 Conversion Events & Screen Orientation in a 2 in 1 Device: /en-us/articles/detecting-slateclamshell-mode-screen-orientation-in-convertible-pc

  • ideum
  • GestureWorks; Ultrabook
  • virtual controller
  • Developers
  • Microsoft Windows* 8
  • Windows*
  • Beginner
  • Game Development
  • Sensors
  • Touch Interfaces
  • User Experience and Design
  • Laptop
  • Tablet
  • URL
  • Viewing all 82 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>