WinForms 프로그램이 있습니다. 여기에 위, 아래, 왼쪽 및 오른쪽을 누르면 움직이는 특정 애니메이션 개체가 있습니다. 객체의 움직임은 30ms마다 호출되는 타이머 내부에서 움직입니다. 타이머는 KeyDown 이벤트에서 시작하고 KeyUp 이벤트에서 중지합니다.System.Timers.Timer 다른 키가 릴리스 된 후 시작과 관련된 문제
예를 들어 왼쪽으로 누른 다음 왼쪽 키를 놓은 다음 다른 것을 누르면 바로 그 방향으로 이동하기 전에 약간의 일시 중지 (약 0.5 초)가 있습니다. 그 문제는 나타나지 않습니다. 왼쪽으로 잡고 있으면 풀어서 조금 기다려주십시오. then 오른쪽을 누르십시오. 그런 경우에는 즉시 오른쪽으로 움직일 것입니다. 왼쪽을 누르고 있으면 왼쪽으로 계속 누르고있는 동안 오른쪽을 누르고 있습니다. 이 경우, 곧바로 움직이기 시작할 것입니다. 키를 놓은 후 즉시 다른 키를 누르면 문제가 나타납니다.
KeyDown 이벤트 :
private void form_KeyDown(object sender, KeyEventArgs e)
{
k = 0;
watch.Start();
if (e.KeyCode == Keys.Left)
{
direction = MOVE_LEFT;
}
else if (e.KeyCode == Keys.Right)
{
direction = MOVE_RIGHT;
}
else if (e.KeyCode == Keys.Up)
{
direction = MOVE_UP;
}
else if (e.KeyCode == Keys.Down)
{
direction = MOVE_DOWN;
}
timerMove.Start();
}
KeyUp 이벤트 :
private void form_KeyUp(object sender, KeyEventArgs e)
{
timerMove.Stop();
}
타이머 이벤트 (애니메이션 이동)
void charMovement(object sender, System.Timers.ElapsedEventArgs e)
{
if (direction == MOVE_LEFT)
{
timerMove.Interval = 30;
CharSize(11, 15); //mainChar.Size = new System.Drawing.Size(11, 15);
//code for movement
}
else if (direction == MOVE_RIGHT) //... etc. etc.
WinForms 응용 프로그램에서는 'System.Timers.Timer'가 아닌'System.Windows.Forms.Timer'를 사용해야합니다. 애니메이션이 어떻게 엉망이됩니까? – SLaks
내 애니메이션이 망가 졌기 때문에 사용할 수 없습니다. 나는 이미 그것을 시도했지만 stackoverflow 사람들이 Timers.Timer를 대신 사용하라고했다. 적어도 제 애니메이션은 이제 괜찮습니다, 제가 가진 유일한 문제는 위에서 말한 것입니다. – NoelAramis
애니메이션이 어떻게 엉망이됩니까? – SLaks