XNA在PC上显示xbox屏幕键盘

时间:2013-01-29 19:04:17

标签: c# .net xna keyboard gamepad

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

有没有办法实现这个目标?在PC上调用xbox屏幕键盘?

5 个答案:

答案 0 :(得分:4)

如果您需要一个像触摸屏显示器那样可以

 using System.Diagnostics;
 using System.IO;

然后使用此功能

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

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

答案 1 :(得分:2)

没有。这是一个设计决策(在此记录),以便最终用户控制被调用的键盘。因此,最终用户必须触摸文本框(或类似物)以调用虚拟屏幕上键盘。

检查this text f或此链接

  

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

     

Blockquote这意味着应用程序无法通过操作焦点以编程方式调用触摸键盘。过去的重大肇事者是网页 - 其中许多人默认将焦点设置为输入字段,但在其页面上提供了许多其他体验供用户欣赏。一个很好的例子是msn.com。该网站有很多内容供消费,但碰巧在其页面顶部有一个Bing搜索栏,默认情况下需要关注。如果自动调用键盘,默认情况下位于搜索栏下方的所有文章都会被遮挡,从而破坏了网站在平板电脑上的体验。在某些情况下,必须点击以获取键盘感觉不太好,例如当用户启动新电子邮件或打开“搜索”窗格时。但是,我们认为要求用户点击输入字段是一种可接受的折衷方案。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

有关如何执行此操作的良好指南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; 
} 

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

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

if (result != null) 
{ 
    //use result here 
} 

答案 4 :(得分:0)

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

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