2014-02-15 5 views
2

나는 픽스 박스 안에서 임의의 방향으로 gif를 움직이는 프로그램을 가지고있다. 그러나 함수가 호출되면 gif는 멈출 것이다. 그러나, 그림 상자를 이동하려면 keyDown 함수를 사용하여 상자를 이동할 때 애니메이션 유지됩니다. 움직이는 동안 어떻게 움직일 수 있습니까?애니메이션 GIF를 일시 중지하지 않고 어떻게 이동할 수 있습니까?

이것은 내가 gif를 얼려서 무작위로 움직이기 위해 사용했던 것입니다.

void Form1_KeyDown(object sender, KeyEventArgs e) 
{   
    if (e.KeyCode == Keys.A) 
    { 
     eventDuration = randomizer.Next(30, 70); 
     while (eventDuration != 0) 
     { 
      MoveLeft(); 
      eventDuration = eventDuration - 1; 
      Thread.Sleep(15); 
     } 
    } 
} 

private void MoveLeft() 
{ 
    _y = picPicture.Location.Y; 
    _x = picPicture.Location.X; 
    picPicture.Location = new System.Drawing.Point(_x - 1, _y); 
} 

그러나 이것을 사용하면 A 키를 누른 채로 있어도 gif가 정지하지 않고 부드럽게 움직입니다. 이 상수 사용자 입력을 필요로하기 때문에 첫 번째는

void Form1_KeyDown(object sender, KeyEventArgs e) 
{   
    if (e.KeyCode == Keys.A) 
    { 
     MoveLeft(); 
    } 
} 

private void MoveLeft() 
{ 
    _y = picPicture.Location.Y; 
    _x = picPicture.Location.X; 
    picPicture.Location = new System.Drawing.Point(_x - 1, _y); 
} 

가 어떻게 GIF를 일시 중지하지 않고 임의의 거리 내 그림 상자를 이동할 수 있습니다

이동 방향으로 자율적 동안 나는이 방법을 사용할 수 없습니다?

답변

4

Thread.Sleep을 사용하는 경우 응용 프로그램은 다시 그리기를 포함하여 창 이벤트를 처리하지 않습니다. 이를 수행하는 적절한 방법은 Timer class을 사용하는 것입니다. 키를 누르면 타이머를 활성화하고 컨트롤을 Tick 이벤트로 이동해야합니다.

Thread.Sleep 뒤에 Application.DoEvents method을 부를 수도 있지만 좋지 않습니다.

0

이동 중에 GIF에 애니메이션을 적용하려면 KeyDown() 메서드에서 timer를 시작하고 Tick에서 MoveLeft() 메서드를 호출 할 수 있습니다. 애니메이션을 중단하려면 다른 키를 눌러 타이머를 중지하십시오. 이런 식으로 움직임이있을 때와 움직이지 않을 때 애니메이션을 얻을 수 있습니다.

private Timer _timer = new Timer(); 

_timer.Interval = 10; // miliseconds 

void Form1_KeyDown(object sender, KeyEventArgs e) 
{   
    if (e.KeyCode == Keys.A) 
    { 
     _timer.Start(); 
    } 
    if (e.KeyCode == "KEY_FOR_STOPPING_ANIMATION") 
    { 
     _timer.Stop(); 
    } 
} 

void timer1_Tick(object sender, EventArgs e) 
{ 
    MoveLeft(); 
} 
관련 문제