사용자가 화살표로 이동할 수있는 간단한 응용 프로그램을 만들려고합니다. 지금까지 사용자가 ProcessCmdKey() 메서드를 위, 아래, 왼쪽 및 오른쪽으로 우선적으로 이동할 수 있도록 관리했습니다.화살표 키 감지 - 한 번에 여러 개의 키
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);
}
문제는 사용자가 대각선으로 지나가도록하는 것이 좋습니다. 동시에 똑바로 좋아. 불행히도 운이 없으면 몇 가지 해결책을 찾으려고 노력했습니다. 왼쪽/오른쪽 키를 돌리거나 회전하도록 수정하려고합니다. 위로 키는 "앞으로"가 아니라 "올라 가기"를 의미합니다. 하지만 우선, 나는 2 개의 키를 한 번에 만들 필요가있다.
그래서 문제는 대각선으로 이동하기 위해 2 개의 키를 동시에 사용하는 것이 가능하다는 것입니다.
추신. Atm, 나는 그림 상자에 타원을 이동하여 Point statek = new Point(250, 470);
코드를 변경하므로 타이머가 틱 할 때마다 X 또는 Y가 변경되었는지 확인하고 새 위치로 그립니다. 흔히 진드기가 들었습니다. 그래서 지금은 실시간 움직임을 얻으려고 노력했습니다. 그게 복잡한 응용 프로그램이 될거야.
이것은 좋은 대답입니다. –
키가 작동하지 않으면 반복되지 않습니다. 타이머가 필요합니다. –
@ 한스 예, 당신은 절대적으로 옳습니다. Windows는 마지막으로 누른 키에 대해 WM_KEYDOWN 메시지를 보냅니다. 이 키를 놓으면 움직임이 멈 춥니 다. 타이머가이 상황에서 확실히 도움이 될 것입니다.하지만 타이머를 사용하면 Pinvoke를 GetKeyboardState에 사용하는 것이 좋습니다. –