代码:
private void sprites_updater_Tick(object sender, EventArgs e)
{
s++;
int x = player.Location.X;
int y = player.Location.Y;
if (s == 1)
if (ModifierKeys.HasFlag(Keys.A))
{
player.Location = new Point(x - 5, y);
}
s = 0;
sprites_updater.Start();
}
因此,在使用计时器代码时,我在上面写了相同的内容(ModifierKeys.HasFlag(Keys.A)),但它没有用。为什么?! 顺便说一句,有没有办法在WinForms面板中显示3D摄像头视角而不使用XNA,WPF或任何其他东西(只有.NET)?!
答案 0 :(得分:1)
获取键盘笔划并在以后处理它们的最佳方法是使用KeyDown,KeyUp和flags捕获表单中的Keyboards事件:
bool isAPressed;
...
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch(e.KeyCode)
{
case Key.A:
isAPressed = true;
break;
case Key.XXXX:
...
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch(e.KeyCode)
{
case Key.A:
isAPressed = false;
break;
case Key.XXXX:
...
}
}
然后您可以在计时器中使用此信息:
private void sprites_updater_Tick(object sender, EventArgs e)
{
s++;
int x = player.Location.X;
int y = player.Location.Y;
if (s == 1)
if (isAPressed)
{
player.Location = new Point(x - 5, y);
}
s = 0;
sprites_updater.Start();
}
这特别有利于以这种方式处理球员移动(箭头)。