【发布时间】:2014-07-07 16:05:35
【问题描述】:
你们都怎么了。我已经覆盖了 ProcessKeypreview 方法,这样我就可以检测到“WASD”键何时被持有,然后被释放。但是,当发生碰撞时,我会遇到问题,例如当按下“A”而“W”已经被按住时。在按住特定键时如何防止所有其他键按下?
这是我的代码的 sn-p:
const int WM_KEYDOWN = 0x0100;
const int WM_KEYUP = 0x0101;
protected override bool ProcessKeyPreview(ref Message m)
{
int msgVal = m.WParam.ToInt32();
if (m.Msg == WM_KEYDOWN)
{
switch((Keys)msgVal) {
case Keys.W:
Console.WriteLine("W being held");
break;
case Keys.A:
Console.WriteLine("A being held");
break;
}
}
if (m.Msg == WM_KEYUP) {
switch((Keys)msgVal) {
case Keys.W:
Console.WriteLine("W released");
break;
case Keys.A:
Console.WriteLine("A released");
break;
}
}
return base.ProcessKeyPreview(ref m);
}
【问题讨论】:
-
您的代码没有返回布尔值。至少,它应该返回
return base.ProcessKeyPreview(ref m);。此外,你的常数是倒退的。WM_KEYDOWN = 0x0100 -
您的最终目标是知道某些键何时被按下正确?
-
很好,我会编辑它。但与此同时,请随意假设该方法完美无缺。我的最终目标是防止字母 A 的 keydown 被触发,而字母 W 的 keydown 已经被触发。
-
游戏不是这样运作的。最后一把钥匙获胜。试试看。