我需要在类似 xbox 的屏幕键盘中显示和输入一些文本。可悲的是,当我打电话时Guide.BeginShowKeyboardInput
,只显示了一些有趣的文本框,我必须通过键盘填写。我知道,在 PC iv 上使用键盘非常正常,但在我的情况下,我必须通过游戏手柄输入文本,在屏幕键盘上使用 xbox。
有什么办法可以做到这一点?在 PC 上调用 xbox 屏幕键盘?
如果您需要一个触摸屏显示器,您可以这样做
using System.Diagnostics;
using System.IO;
然后使用这个功能
Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + Path.DirectorySeparatorChar + "osk.exe");
但如果您需要它像 xbox 控制器一样使用,您可能需要构建自己的
不,这是一个设计决定(在此处记录),让最终用户控制被调用的键盘。因此,最终用户必须触摸文本框(或类似物)来调用虚拟屏幕键盘。
从这个链接检查这个文本
Blockquote 用户驱动调用 触摸键盘的调用模型旨在让用户控制键盘。用户通过点击输入控件向系统表明他们想要输入文本,而不是让应用程序代表他们做出决定。这将意外调用键盘的情况减少到零,这可能是 UI 流失的痛苦来源,因为键盘可以占用高达 50% 的屏幕并损害应用程序的用户体验。为了启用用户驱动的调用,我们跟踪最后一个触摸事件的坐标,并将它们与当前具有焦点的元素的边界矩形的位置进行比较。如果该点包含在边界矩形内,则调用触摸键盘。
Blockquote 这意味着应用程序不能通过焦点操作以编程方式调用触摸键盘。过去的罪魁祸首是网页——其中许多默认将焦点设置在输入字段中,但在其页面上还有许多其他体验可供用户享受。msn.com 就是一个很好的例子。该网站有很多可供消费的内容,但恰好在其页面顶部有一个 Bing 搜索栏,默认情况下会成为焦点。如果键盘被自动调用,则默认情况下该搜索栏下方的所有文章都将被屏蔽,从而破坏网站在平板电脑上的体验。在某些情况下,必须点击才能获得键盘感觉不太好,例如当用户开始发送新电子邮件或打开“搜索”窗格时。然而,
查看:http
://classes.soe.ucsc.edu/cmps020/Winter08/lectures/controller-keyboard-input.pdf
您可能会在这里找到答案,它包含有关游戏手柄等输入的所有信息。
这里有一个关于如何做到这一点的很好的指南:
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
}
屏幕键盘不太可能包含在 PC 的 XNA DLL 中,但如果您真的想知道,您可以研究一个免费的 .NET 反编译程序(例如 ILSpy)并查看它。
此外,您也不能使用聊天板。我建议要么制作你自己的可由控制器使用的屏幕键盘,或者如果可以的话,使用 MonoGame 框架(XNA 的开源版本),并将其修改为具有屏幕键盘视窗。您还可以制作一个单独的程序,充当由控制器控制的虚拟键盘。