Как я могу сделать свой смайлик (сделанный с помощью Windows Forms) относительным, а это означает, что при присвоении ему другой (x, y) координаты он останется прежним? - PullRequest
0 голосов
/ 22 сентября 2019

Я сделал смайлик в методе tekenScherm (= drawScreen) с заданными переменными x, y, w (= width) и h (= height).Базовые значения этих переменных: (100, 50, 300, 300).Если вы введете эти значения в моем коде, вы получите смайлик.

Теперь я хочу иметь возможность настроить эти значения x, y, w и h, чтобы смайлик оставался относительно одинаковым.

Я уже выяснил, как это сделать для координат x и y, поэтому при изменении, например, координаты x, левый глаз изменится на x + 50, правый глаз на x + 170Таким образом, он остается относительно неизменным.

Теперь проблема заключается в ширине и высоте глаз и рта.Я хочу иметь возможность изменять переменные ширины и высоты ('w', 'h'), и чтобы смайлик оставался примерно таким же.Я пробовал разные вещи, ломая голову часами, но не могу заставить его работать.

Это код:

namespace Smiley2
{
    class HalloForm : Form
    {
        public HalloForm()
        {
            this.Text = "Smiley";
            this.BackColor = Color.White;
            this.Size = new Size(500, 500);
            this.Paint += this.tekenScherm;
        }

        void tekenScherm(object obj, PaintEventArgs pea)
        {
            float x, y, w, h, wOogLinks, wOogRechts;
            x = 100; y = 50; w = 300; h = 300;

            Pen pen = new Pen(Brushes.Black);
            pea.Graphics.FillEllipse(Brushes.Yellow, x, y, w, h);
            pea.Graphics.DrawEllipse(pen, x, y, w, h);

            pea.Graphics.FillEllipse(Brushes.White, x + 50, y + 50, 75 * (w / 300), 75 / 300f * h);
            pea.Graphics.FillEllipse(Brushes.White, x + 170, y + 50, 75 * (w / 300), 75 / 300f * h);
            pea.Graphics.DrawArc(pen, x + 90, y + 135, 125f / 300 * w, 100f / 300 * h, 0, 180);
        }
    }

    class HalloWin3
    {
        static void Main()
        {
            HalloForm scherm;
            scherm = new HalloForm();
            Application.Run(scherm);
        }
    }
}

1 Ответ

0 голосов
/ 24 сентября 2019

Это можно сделать, рассчитав шкалы ширины и высоты, а затем умножив эти значения на каждое связанное значение.X & Y по-прежнему дают смещение, и теперь вы можете изменять w & h по своему усмотрению, и значения будут масштабироваться независимо.

    void tekenScherm(object obj, PaintEventArgs pea)
    {
        float x, y, w, h, wOogLinks, wOogRechts;
        x = 100; y = 50; w = 300; h = 300;
        float scaleW = w / 300f;
        float scaleH = h / 300f;

        Pen pen = new Pen(Brushes.Black);
        pea.Graphics.FillEllipse(Brushes.Yellow, x, y, w, h);
        pea.Graphics.DrawEllipse(pen, x, y, w, h);

        pea.Graphics.FillEllipse(
            Brushes.White, 
            x + 50 * scaleW, 
            y + 50 * scaleH, 
            75 * scaleW, 
            75 * scaleH);
        pea.Graphics.FillEllipse(
            Brushes.White, 
            x + 170 * scaleW, 
            y + 50 * scaleH, 
            75 * scaleW, 
            75 * scaleH);
        pea.Graphics.DrawArc(
            pen, 
            x + 90 * scaleW, 
            y + 135 * scaleH, 
            125f * scaleW, 
            100f * scaleH, 
            0, 
            180);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...