http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - Windows 中有一个用于设置重复延迟的选项。这意味着如果一个人一直按下键,那么第一次击键和其他击键之间的延迟。我正在创建一种游戏,我需要摆脱这个“功能”。
到目前为止,我已经设法找到这种方法:
[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);
public static bool IsKeyPushedDown(Keys keyData)
{
return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}
但是 IsKeyPushedDown 方法会在调用函数的那一刻确定是否按下了键 - 所以我需要一个循环来测试键是否按下。问题是它仍然不能捕获所有击键 - 我猜我的循环太慢了。
第二个选择是覆盖 ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// processing keys
if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
这真的很好,但它会受到重复延迟的影响,因此我的怪物在我的游戏中的移动就像:
我的问题有解决方案吗?谢谢
编辑:我通过结合这两个程序解决了这个问题。但这是非常丑陋的解决方案。我仍然希望有更好的解决方案。