2010-03-26 2 views
0

Bon alors j'essaye de faire un petit programme gag qui va "s'enfuir" de la souris.Fais gagner la forme de la souris loin de la souris

Ainsi, pour obtenir les coordonnées de la souris pour l'écran et non seulement le contrôle de la forme que je devais créer une petite aide:

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; 
    }  
} 

Maintenant, je pensais que je vais utiliser l'événement MouseMove ... mais cela ne fonctionne pas en dehors du contrôle de formulaire, donc j'ai un minuteur auto-activé sur une boucle de 10 ms appelé timerMouseMove.

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); 
    } 
} 

Donc, cela fonctionne bien, au moins, j'ai le travail de vérification de collision et autres joyeusetés. Mais maintenant, comment dois-je faire pour déterminer de quel côté de la forme la souris est entrée en collision, afin que je puisse mettre à jour son emplacement pour se déplacer dans la direction opposée à celle de la souris? Et tel halp

Répondre

1

Vous capturez la position de la souris au fil du temps, de sorte que vous pouvez déduire la direction si vous gardez une "position" et une "dernière position". Vous pouvez même calculer la vitesse et déplacer la forme d'une plus grande distance si la souris se déplace plus vite.

Joyeux poisson d'avril!