2010-03-26 2 views
0

그래, 마우스에서 도망 갈 작은 개그 프로그램을 만들려고합니다. 그래서 winform을 마우스에서 멀리 떨어지게하십시오.

는, 마우스 내가 조금 도우미를 작성했다 단지 폼 컨트롤 전체 화면 좌표를하지 얻을 :
static class MouseHelper 
{ 
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    internal static extern bool GetCursorPos(ref Point pt); 

    public static Point GetPosition() 
    { 
     Point w32Mouse = new Point(); 
     GetCursorPos(ref w32Mouse); 
     return w32Mouse; 
    }  
} 

지금 내가 MouseMove 이벤트를 사용하는 거라고 생각을 ... 하지만 그것은 폼 컨트롤 밖에서도 작동하지 않기 때문에 timerMouseMove라는 10ms 루프에 자동으로 활성화 된 타이머가 있습니다.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private bool CollisionCheck() 
    { 
     Point win32Mouse = MouseHelper.GetPosition(); 

     if (win32Mouse.X <= Location.X || win32Mouse.X >= (Location.X + Width)) 
      return false; 

     if (win32Mouse.Y <= Location.Y || win32Mouse.Y >= (Location.Y + Height)) 
      return false; 

     return true; 
    } 

    private void timerMouseMove_Tick(object sender, EventArgs e) 
    { 
     if (CollisionCheck()) 
      Location = new Point(Location.X + 1, Location.Y + 1); 
    } 
} 

이렇게 멋지게 작동합니다. 따라서 적어도 충돌 확인 작업과 기타 등등이 있습니다. 그러나 이제는 마우스가 충돌 한 형태의 측면을 파악하여 마우스가 반대 방향으로 이동하도록 위치를 업데이트 할 수 있도록 어떻게해야합니까? 그리고 그러한 Halp

답변

1

당신은 "이 위치"와 "마지막 위치"를 유지한다면 방향을 추측 할 수 있도록 마우스 위치를 캡쳐하고 있습니다. 마우스가 더 빨리 움직이는 경우 속도를 계산하고 더 먼 거리로 이동할 수도 있습니다.

해피 만우절!

관련 문제