5

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

有什么办法可以做到这一点?在 PC 上调用 xbox 屏幕键盘?

4

5 回答 5

4

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

 using System.Diagnostics;
 using System.IO;

然后使用这个功能

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

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

于 2013-02-01T17:38:06.667 回答
2

不,这是一个设计决定(在此处记录),让最终用户控制被调用的键盘。因此,最终用户必须触摸文本框(或类似物)来调用虚拟屏幕键盘。

从这个链接检查这个文本

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

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

于 2013-02-03T13:30:01.397 回答
1

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

于 2013-02-01T12:08:19.887 回答
1

这里有一个关于如何做到这一点的很好的指南:

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; 
} 

您的 Update 方法应该包含如下内容:

if (KeyboardInputRequested) 
{ 
    string result = GetKeyboardInput(); 
} 

if (result != null) 
{ 
    //use result here 
} 
于 2013-02-04T12:15:41.560 回答
0

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

此外,您也不能使用聊天板。我建议要么制作你自己的可由控制器使用的屏幕键盘,或者如果可以的话,使用 MonoGame 框架(XNA 的开源版本),并将其修改为具有屏幕键盘视窗。您还可以制作一个单独的程序,充当由控制器控制的虚拟键盘。

于 2013-07-05T00:10:36.867 回答