C # - переместить фигуру в точку, которая находится на полпути от вершины формы - PullRequest
3 голосов
/ 24 апреля 2010

Здесь я должен создать ромб с помощью метода Drawlines и заставить его двигаться горизонтально по пути, который находится на полпути от вершины формы.

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

Это код для создания бриллианта,

    private void Form1_Paint(object sender, PaintEventArgs e)
    {

        Graphics g = e.Graphics;
        Point p1 = new Point(5+x, 0);
        Point p2 = new Point(10+x, 5);
        Point p3 = new Point(5+x, 10);
        Point p4 = new Point(0+x, 5);
        Point[] ps = { p1, p2, p3, p4, p1 };
        Pen p_yellow = new Pen(Color.Yellow, 5);
        g.DrawLines(p_yellow, ps);
        this.BackColor = System.Drawing.Color.DarkBlue;
    }

Я могу заставить его двигаться, используя таймер, а следующий код:

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (x < 500)
            x += 2;
        else
            timer1.Enabled = false;
        this.Invalidate(); 
    }

скажите, пожалуйста, как привести алмаз в точку, находящуюся на полпути от вершины формы?


private void Form1_Paint(object sender, PaintEventArgs e)
{
    int height = 10;
    int middle = height / 2;
    int middleform = Form1.height / 2;
    int diamondMiddleOfTheForm;
    diamondMiddleOfTheForm = middleForm - middle;

    Graphics g = e.Graphics;
    Point p1 = new Point(5 + x, 0 + diamondMiddleOfTheForm);
    Point p2 = new Point(10 + x, 5 + diamondMiddleOfTheForm);
    Point p3 = new Point(5 + x, 10 + diamondMiddleOfTheForm);
    Point p4 = new Point(0 + x, 5 + diamondMiddleOfTheForm);
    Point[] ps = { p1, p2, p3, p4, p1 };
    Pen p_yellow = new Pen(Color.Yellow, 5);
    g.DrawLines(p_yellow, ps);
    this.BackColor = System.Drawing.Color.DarkBlue;
}

Показывает ошибку при middleForm = Form1.Height / 2 и diamondMiddleOfTheForm = middleForm - middle

Я прошу прощения за свою ошибку, если я сделал что-либо в реализации того, что вы сказали ...

1 Ответ

2 голосов
/ 24 апреля 2010

сначала нужно найти высоту бриллианта. возьмите самую высокую точку в ромбе: 0 и добавьте самую низкую точку в ромбе: 10

height = 10

затем найдите середину алмаза по вертикали:

middle = height / 2

затем найдите середину формы:

middleForm = form.Height / 2

затем рассчитайте положение алмаза, переместив его «вверх» от середины формы на половину высоты алмаза:

diamondMiddleOfTheForm = middleForm - midddle

переменная "diamondMiddleOfTheForm" сообщает вам, где смещать ваши значения "y"

        Point p1 = new Point(5+x, 0+diamondMiddleOfTheForm);
        Point p2 = new Point(10+x, 5+diamondMiddleOfTheForm);
        Point p3 = new Point(5+x, 10+diamondMiddleOfTheForm);
        Point p4 = new Point(0+x, 5+diamondMiddleOfTheForm);
...