Я пытаюсь сделать простое приложение, которое позволяет пользователю перемещаться со стрелками. До сих пор мне удалось позволить пользователю перемещаться вверх, вниз, влево и вправо, переопределяя метод ProcessCmdKey().Detect Arrow Keys - Несколько ключей сразу
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Up)
{
statek.Y--;
return true;
}
if (keyData == Keys.Left)
{
statek.X--;
return true;
}
if (keyData == Keys.Right)
{
statek.X++;
return true;
}
if (keyData == Keys.Down)
{
statek.Y++;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Проблема заключается в том, что я хотел бы позволить пользователю перейти по диагонали. Как вверх, так и в то же время. Я попытался найти некоторые решения, но, к сожалению, не повезло. Я попытаюсь изменить его, чтобы клавиши влево/вправо поворачивались/вращаются, поэтому клавиша «вверх» означает «вперед», а не «подниматься». Но в первую очередь мне нужно сделать сразу два ключа.
Итак, вопрос в том, как я могу сделать возможным использовать два ключа одновременно, чтобы двигаться по диагонали?
PS. Atm, я перемещаю эллипс на картинке, меняя Point statek = new Point(250, 470);
шнуры, поэтому каждый таймер тикает, он проверяет, изменился ли X или Y, и нарисуйте его на новом месте. Часто клепки - вот как я пытался добиться движения в реальном времени на данный момент. Это не будет сложным приложением.
Это хороший ответ. –
Не работает, ключ перестает повторяться. Требуется таймер. –
@ Ханс Да, вы абсолютно правы. Windows отправляет сообщения WM_KEYDOWN для последней нажатой клавиши. Когда эта клавиша отпускается, движение останавливается. Таймер, безусловно, поможет в этой ситуации, но если использовать таймер, он будет платить за использование Pinvoke для GetKeyboardState. –