您可能会遇到密钥重复问题。如果是这种情况,则按下时只会触发最后一个按键。你需要做的是用KeyDown,KeyUp和Deactivate来控制状态,并且有一个定时器来完成实际的工作。定时器将控制你的“游戏循环”运行的速度...对于我的示例,我启用了定时器并将间隔设置为10.
public partial class Form1 : Form
{
private bool _k1 = false;
private bool _k2 = false;
private bool _d1 = false;
private bool _d2 = false;
private int _u1 = 0;
private int _u2 = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
_k1 = true;
_d1= true;
break;
case Keys.Down:
_k1 = true;
_d1 = false;
break;
case Keys.W:
_k2 = true;
_d2 = true;
break;
case Keys.S:
_k2 = true;
_d2 = false;
break;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_k1)
label1.Text =(_u1 = _u1 + (_d1 ? 1 : -1)).ToString();
if (_k2)
label2.Text = (_u2 = _u2 + (_d2 ? 1 : -1)).ToString();
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
_k1 = false;
_d1 = true;
break;
case Keys.Down:
_k1 = false;
_d1 = false;
break;
case Keys.W:
_k2 = false;
_d2 = true;
break;
case Keys.S:
_k2 = false;
_d2 = false;
break;
}
}
private void Form1_Deactivate(object sender, EventArgs e)
{
_k1 = false;
_k2 = false;
}
}
只有一个UI线程。排队你工作发生在后台线程,你应该去。 –
谢谢,我会尽力 – Jerka