KeyUpイベントも存在する必要があり、KeyDownとKeyUpの両方を使用することで、探している効果を実現できます。それはいくつかの方法で行うことができます。
1つは、KeyDownイベントに繰り返しアクションを開始させ、KeyUpにそれをキャンセルさせることです。
もう1つは、特定のキーが押されているかどうかを保存することです。キーのリストを保持し、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;
}
次に、メインループで「heldDown」を実行し、押し下げられているすべての意味のあるキーに対してイベントを発生させます。
if (heldDown[Key.F])
MainController.TriggerPieceEvent(Constants.PieceEvents.RotateClockwise);
if (heldDown[Key.Left])
MainController.TriggerPieceEvent(Constants.PieceEvents.ShiftLeft);
// etc...