Como posso me livrar do atraso de repetição de caracteres em c #?
http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - Existe uma opção no Windows para definir o atraso de repetição. Significa o atraso entre o primeiro pressionamento de tecla e os outros se continuar pressionando a tecla. Estou criando uma espécie de jogo e preciso me livrar desse "recurso".
Até agora consegui encontrar este método:
[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);
public static bool IsKeyPushedDown(Keys keyData)
{
return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}
Mas o método IsKeyPushedDown descobre se a tecla foi pressionada NO MOMENTO de chamar a função - então eu preciso de um loop para testar se a chave está inativa. O problema é que ainda não pega todas as teclas digitadas - eu tenho um loop muito lento, eu acho.
A segunda escolha é substituir o 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);
}
}
Isso funciona muito bem, mas é afetado com o atraso de repetição e, portanto, o movimento do meu monstro no meu jogo é como:
Existe solução para meu problema? obrigado
EDIT: eu resolvi o problema combinando os dois procedimentos. Mas é uma solução muito feia. Eu ainda espero que haja uma solução melhor.