Также должно существовать событие KeyUp, и используя KeyDown и KeyUp, вы можете достичь желаемого эффекта.Это можно сделать несколькими способами.
Один из них - позволить событию KeyDown инициировать повторяющееся действие и позволить KeyUp отменить его.
Другой способ - сохранить, используются ли определенные ключи.удерживается.Держите список ключей и включайте их при KeyDown и выключайте при KeyUp.В основном цикле игры вы будете запускать события, соответствующие всем клавишам, которые в данный момент отключены.
Пример:
bool[] heldDown = new bool[256]; // One index for the keycode of each key
void Window_PreviewKeyDown(object sender, KeyEventArgs e) {
heldDown[e.KeyCode] = true;
}
void Window_PreviewKeyUp(object sender, KeyEventArgs e) {
heldDown[e.KeyCode] = false;
}
И затем вы проходите через «holdDown» в вашем основном цикле и запускаете события для каждого значащего ключа, который удерживается:
if (heldDown[Key.F])
MainController.TriggerPieceEvent(Constants.PieceEvents.RotateClockwise);
if (heldDown[Key.Left])
MainController.TriggerPieceEvent(Constants.PieceEvents.ShiftLeft);
// etc...