我正在尝试用Windows c#形式制作一个平台游戏,在我的主游戏循环中,我有一些代码,但我似乎无法让用户输入正常工作,任何帮助将不胜感激!
这是我的代码:
while (true)// this is still in testing so it should go on forver
if (Keyboard.IsKeyDown(Key.Insert) == true)
{
btn1.Left = btn1.Left + 1;// btn is a button
Update();
}
System.Threading.Thread.Sleep(50);
}
每当我运行此程序时,程序就会变得无对应并最终崩溃 当我按下插入或我使用的任何其他键时它不起作用
答案 0 :(得分:0)
假设此代码在Form
中运行,您应订阅Form
的{{3}}事件:
public partial class YourForm : Form
{
public YourForm()
{
InitializeComponent();
KeyDown += KeyDownHandler; // subscribe to event
KeyPreview = true; // set to true so key events of child controls are caught too
}
private void KeyDownHandler(object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.Insert) return;
btn1.Left = btn1.Left + 1;// btn is a button
e.Handled = true; // indicate that the key was handled by you
//Update(); // this is not necessary, after this method is finished, the UI will be updated
}
}
因此,如果用户按下键,则会调用KeyDownHandler
。无需在阻止UI线程的循环中拉出键盘状态。
如果您希望在自己的代码中编写,也可以在设计器窗口中设置对事件的订阅和KeyPreview
值。
顺便说一下:Keyboard
类是WPF的一部分。您不应该将其与Windows窗体混合使用。