Курсоры, Точка, Различия. C # в WinForms

1

Я всю неделю работаю над этим одним кодом, и до сих пор не получил ответа, который полностью срабатывает по поводу ошибки, с которой я сталкиваюсь. Ошибка var diff = Cursor.Position - playerPoint; в строке var diff = Cursor.Position - playerPoint; , эта ошибка возникает из-за того, что вы не можете использовать (-) операнд между Windows.Point и Drawing.Point но кодирование для его преобразования, похоже, только преобразует его в выражение, в котором оно участвует.

Прокомментированный код - это другая попытка одного и того же метода, но он дает ту же ошибку. Кто-нибудь получил что-нибудь по этому поводу?

private void tmrMoving_Tick(object sender, object value, Type targetType,
            object parameter, CultureInfo culture, EventArgs e)
        {
            System.Drawing.Point dp = (System.Drawing.Point)value;
            var playerPoint = new System.Windows.Point(dp.X, dp.Y);

            var cursPoint = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
           // var playerPoint = new System.Windows.Point(player.Location.X, player.Location.Y);
            var diff = Cursor.Position - playerPoint;
            var speed = Math.Sqrt(diff.X * diff.X + diff.Y * diff.Y);
            if (speed > 10)
            {
                diff.X /= speed / 10;
                diff.Y /= speed / 10;
            }
            player.Location += new System.Drawing.Point((int)diff.X, (int)diff.Y);
        }

Редактировать Если метод не просматривается с помощью приведенного выше кода, может возникнуть проблема в следующем:

private void tmrMoving_Tick(object sender, object value, Type targetType,
        object parameter, CultureInfo culture, EventArgs e)
    {

        var cursPoint = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
        var playerPoint = new System.Windows.Point(player.Location.X, player.Location.Y);
        var diff = Cursor.Position - playerPoint;
        var speed = Math.Sqrt(diff.X * diff.X + diff.Y * diff.Y);
        if (speed > 10)
        {
            diff.X /= speed / 10;
            diff.Y /= speed / 10;
        }
        player.Location += new System.Drawing.Point((int)diff.X, (int)diff.Y);
    }
Теги:
winforms

2 ответа

1
Лучший ответ

Поскольку Cursor - это класс Windows Forms/GDI+, и ваше использование System.Windows.Point указывает, что вы используете WPF, у вас есть проблема. Эти классы не взаимозаменяемы.

Если вы используете WPF: вместо Cursor.Position вы можете использовать Mouse.GetPosition(Application.Current.MainWindow); как указано здесь.

Если вы используете WF: используйте System.Drawing.Point полностью, а не System.Windows.Point.

Однако вычитание точек невозможно. Вы должны написать это самостоятельно или, лучше, построить новую точку и выполнить математику в вызове конструктора.

0

Вы можете вычислить вектор от одной точки до следующей непосредственно по координатам:

int diffX = dp.X - Cursor.Position.X;
int diffY = dp.Y - Cursor.Position.Y;
var speed = Math.Sqrt(diffX * diffX + diffy * diffY);

до тех пор, пока dp и Cursor.Position используют одну и Cursor.Position же систему координат, то есть 0,0 означает то же самое для обоих.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню