【问题标题】:XNA show xbox onscreen keyboard in PCXNA 在 PC 中显示 xbox 屏幕键盘
【发布时间】:2013-01-29 19:04:16
【问题描述】:

我需要在类似 xbox 的屏幕键盘中显示和输入一些文本。可悲的是,当我打电话给Guide.BeginShowKeyboardInput 时,只显示了一些有趣的文本框,我必须通过键盘填写。我知道,在 PC iv 上使用键盘非常正常,但在我的情况下,我必须通过游戏手柄输入文本,在屏幕键盘上使用 xbox。

有什么方法可以实现吗?在 PC 上调用 xbox 屏幕键盘?

【问题讨论】:

    标签: c# .net xna keyboard gamepad


    【解决方案1】:

    如果你需要一个触摸屏显示器,你可以这样做

     using System.Diagnostics;
     using System.IO;
    

    然后使用这个函数

      Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + Path.DirectorySeparatorChar + "osk.exe");
    

    但如果您需要它像 xbox 控制器一样使用,您可能需要构建自己的

    【讨论】:

      【解决方案2】:

      没有。让最终用户控制被调用的键盘是一个设计决策(在此处记录)。因此,最终用户必须触摸文本框(等)来调用虚拟屏幕键盘。

      查看this text form 这个链接

      Blockquote 用户驱动的调用 触摸键盘的调用模型旨在让用户控制键盘。用户通过点击输入控件向系统表明他们想要输入文本,而不是让应用程序代表他们做出决定。这将意外调用键盘的情况减少到零,这可能是 UI 流失的痛苦来源,因为键盘可以占用高达 50% 的屏幕并损害应用程序的用户体验。为了启用用户驱动的调用,我们跟踪最后一个触摸事件的坐标,并将它们与当前具有焦点的元素的边界矩形的位置进行比较。如果该点包含在边界矩形内,则调用触摸键盘。

      Blockquote 这意味着应用程序无法通过焦点操作以编程方式调用触摸键盘。过去的罪魁祸首是网页——其中许多默认将焦点设置在输入字段中,但在其页面上还有许多其他体验可供用户享受。 msn.com 就是一个很好的例子。该网站有很多可供消费的内容,但恰好在其页面顶部有一个 Bing 搜索栏,默认情况下会成为焦点。如果键盘被自动调用,则默认情况下该搜索栏下方的所有文章都将被屏蔽,从而破坏网站在平板电脑上的体验。在某些情况下,必须点击才能获得键盘感觉不太好,例如当用户开始发送新电子邮件或打开“搜索”窗格时。但是,我们认为要求用户点击输入字段是可以接受的折衷方案。

      【讨论】:

      • 答案不相关。我在询问 Xbox 屏幕键盘,通过游戏手柄输入文本,而不是触摸键盘。但是谢谢你的时间:)
      【解决方案3】:

      查看:http://classes.soe.ucsc.edu/cmps020/Winter08/lectures/controller-keyboard-input.pdf
      您可能会在这里找到答案,它包含有关游戏手柄等输入的所有信息。

      【讨论】:

      • 不幸的是,在这个文档中我找不到任何我需要的东西。在我问这个问题之前我读过它;)。不过还是谢谢:)
      • 嗯,这很不幸,我多看看周围 ^^
      • 试试这个。 xboxforums.create.msdn.com/forums/p/38725/353171.aspx在第二篇文章中,您可以找到创建虚拟键盘的分步计划。
      • 遗憾的是,我需要使用默认的 xbox 屏幕键盘,并且我不能使用任何替代品。我知道如何处理来自游戏手柄的输入;)。无论如何谢谢...
      【解决方案4】:

      有一个很好的指导如何做到这一点here

      static public string GetKeyboardInput() 
      { 
          if (HandleInput.currentState.IsButtonDown(Buttons.B)) 
          { 
              useKeyboardResult = false; 
          } 
      
          if (KeyboardResult == null && !Guide.IsVisible) 
          { 
               string title = "Name"; 
               string description = "Pick a name for this game"; 
               string defaultText = "Your name here"; 
      
               pauseType = PauseType.pauseAll; 
               KeyboardResult = Guide.BeginShowKeyboardInput(HandleInput.playerIndex, title, 
                                                             description, defaultText, null, null); 
      
               useKeyboardResult = true; 
               pauseType = PauseType.pauseAll; 
      
           } 
           else if (KeyboardResult != null && KeyboardResult.IsCompleted) 
           { 
                pauseType = PauseType.none; 
                KeyboardInputRquested = false; 
      
                string input = Guide.EndShowKeyboardInput(KeyboardResult); 
                KeyboardResult = null; 
      
                if (useKeyboardResult) 
                { 
                     return input; 
                } 
           } 
      
           return null; 
      } 
      

      你的更新方法应该包含这样的内容:

      if (KeyboardInputRequested) 
      { 
          string result = GetKeyboardInput(); 
      } 
      
      if (result != null) 
      { 
          //use result here 
      } 
      

      【讨论】:

      • 正如我所说的:此代码将显示屏幕键盘,但仅在 xbox(和寡妇手机,我假设)上。在 PC 上,它将仅显示文本框以从旧的标准硬件 PC 键盘中获取文本。
      【解决方案5】:

      屏幕键盘不太可能被打包在 PC 的 XNA DLL 中,但如果你真的想知道,你可以研究一个免费的 .NET 反编译程序(如 ILSpy)并查看它。

      另外,you can't use the chatpad either。我建议要么制作你自己的可供控制器使用的屏幕键盘,或者,如果可以的话,使用 MonoGame 框架(XNA 的开源版本),并将其修改为具有屏幕键盘视窗。 您还可以制作一个单独的程序,充当由控制器控制的虚拟键盘。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 2011-11-09
        • 2020-12-27
        相关资源
        最近更新 更多