Заставьте winform убежать от мыши - PullRequest
0 голосов
/ 26 марта 2010

Хорошо, я пытаюсь создать небольшую программу, которая будет "убегать" от мыши.

Итак, чтобы получить координаты мыши для всего экрана, а не только для элемента управления формы, мне нужно было создать маленького помощника:

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 ... но это не работает и за пределами элемента управления формы, поэтому у меня есть автоматически включенный таймер в цикле 10 мс, называемый 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);
    }
}

Так что это хорошо работает, по крайней мере, у меня работает проверка столкновений и еще много чего. Но теперь, как мне выяснить, с какой стороны формы столкнулась мышь, чтобы я мог обновить ее местоположение, чтобы двигаться в противоположном направлении, с которым сталкивается мышь? И такой халф

1 Ответ

1 голос
/ 26 марта 2010

Вы фиксируете положение мыши с течением времени, поэтому вы можете определить направление, если сохраните «эту позицию» и «последнюю позицию». Вы даже можете рассчитать скорость и переместить форму на большее расстояние, если мышь движется быстрее.

Счастливого Дурака!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...