gpt4 book ai didi

c# - 在 XNA 中进行文本输入(用于输入姓名、聊天)

转载 作者:太空狗 更新时间:2023-10-29 21:35:28 25 4
gpt4 key购买 nike

我正在尝试实现键盘文本输入以在游戏中聊天、输入角色名称、保存文件名等。

我正在弄乱 KeyboardState 试图将最新添加的符号转换成我可以添加到我的输入字符串中的字符,但它似乎按某种顺序对当前按下的键的数组进行排序(我打赌它是按键码),因此我无法轻松找到最后按下的键以将其添加到输入字符串中。

是否有一种简单的方法来检测最后按下的文本键(包括按下多个键的情况,因为人们有时会这样做),还是使用一些现有的解决方案更容易?

我正在学习 C# 和 XNA,所以我希望能够自己完成,但最终我希望我的游戏能够运行。

最佳答案

为了处理文本输入,您需要知道何时按下或释放某个键。不幸的是,XNA 的 KeyboardState 对此没有真正的帮助,所以您必须自己做。基本上,您只需将当前更新的 PressedKeys 与之前更新的 PressedKeys 进行比较。

public class KbHandler
{
private Keys[] lastPressedKeys;

public KbHandler()
{
lastPressedKeys = new Keys[0];
}

public void Update()
{
KeyboardState kbState = Keyboard.GetState();
Keys[] pressedKeys = kbState.GetPressedKeys();

//check if any of the previous update's keys are no longer pressed
foreach (Keys key in lastPressedKeys)
{
if (!pressedKeys.Contains(key))
OnKeyUp(key);
}

//check if the currently pressed keys were already pressed
foreach (Keys key in pressedKeys)
{
if (!lastPressedKeys.Contains(key))
OnKeyDown(key);
}

//save the currently pressed keys so we can compare on the next update
lastPressedKeys = pressedKeys;
}

private void OnKeyDown(Keys key)
{
//do stuff
}

private void OnKeyUp(Keys key)
{
//do stuff
}
}

为您的 Game 类提供一个 KbHandler,并从您的 Game 的更新方法中调用它的 Update 方法。

(顺便说一句,可能有一种比使用 foreach 和 Contains 更有效的方法来比较两个数组,但要比较的项目太少,我怀疑这是否重要。)

关于c# - 在 XNA 中进行文本输入(用于输入姓名、聊天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com