Как начать движение моих фигур после того, как моя первая фигура начала двигаться - PullRequest
0 голосов
/ 22 ноября 2018

Итак, проблема в том, что после того, как я закончил движение моей первой фигуры, я хочу начать перемещать мои другие фигуры, но когда я компилирую свою программу, они двигаются одновременно.Я попытался использовать 2 разных таймера, чтобы остановить первый и запустить другой, но результат будет одинаковым, или одна из фигур не будет двигаться вообще.Цель состоит в том, чтобы сделать иллюстрацию теоремы Пифагора.Вот моя программа:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp14
{
    public partial class Form1 : Form
    {
         Bitmap myBitmap;
         Graphics g;

        int c = 147;

        private int X1Green, X2Green, Y1Green, Y2Green;//These variables are the coordinates of the Green Triangle which will be used to move it
        private int X1Blue, X2Blue;// These variables are the coordinates of the Blue Triangle which will be used to move it
        private int Y1PaleGreen, Y2PaleGreen;//These variables are the coordinates of the Pale Green Triangle which will be used to move it
        Timer timer1;
        Timer timer2;


        public Form1()
        {
            InitializeComponent();

            X1Green = 450;
            X2Green = 380;
            Y1Green = 120;
            Y2Green = 250;


            X1Blue = 380;
            X2Blue = 250;


            Y1PaleGreen = 50;
            Y2PaleGreen = 120;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            timer1 = new Timer();
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Start();


            timer2 = new Timer();
            timer2.Tick += new EventHandler(timer2_Tick);
           // timer2.Start();
        }



        private void timer1_Tick(object sender, EventArgs e)
        {

            // Moving the Green Triangle Diagonally to the Light Blue Triangle
            if (Y1Green > 50) { Y1Green -= 3; }
            if (X1Green > 320) { X1Green -= 5; }
            if (X2Green > 250) { X2Green -= 5; }
            if (Y2Green > 180) { Y2Green -= 3; }


            Draw();

            timer2.Start();


        }

        private void timer2_Tick(object sender, EventArgs e)
        {

            //Moving our Blue Triangle
            if (X1Blue < 450) { X1Blue += 2; }
            if (X2Blue < 320) { X2Blue += 2; }

            //Moving our Pale Green Triangle
            if (Y1PaleGreen < 180) { Y1PaleGreen += 4; }
            if (Y2PaleGreen < 250) { Y2PaleGreen += 4; }

          //  Draw();

        }

        private void Draw()
        {
            int a = 70;
            int b = 130;
            //double c = Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));
            int c = 147;

              myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);

              Graphics g = Graphics.FromImage(myBitmap);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            Pen mypen = new Pen(Color.Black, 2);// drawing the rectangle to illustrate inside of it the theorem of Pythagoras
            g.DrawRectangle(mypen, 250, 50, 200, 200);

            SolidBrush LightBlue = new SolidBrush(Color.LightBlue);
            SolidBrush Blue = new SolidBrush(Color.Blue);
            SolidBrush PaleGreen = new SolidBrush(Color.PaleGreen);
            SolidBrush Green = new SolidBrush(Color.Green);







            //Drawing the the Light Blue Triangle at the top left corner of the rectangle
            g.FillPolygon(LightBlue, new Point[]{
                new Point(250,50), new Point(250,180), new Point(320,50)
            });




             pictureBox1.BackgroundImage = myBitmap;

            //Drawing the Pale Green Triangle at the top right corner of the rectangle
            g.FillPolygon(PaleGreen, new Point[] {
                  new Point(320,Y1PaleGreen), new Point( 450,Y1PaleGreen ), new Point( 450, Y2PaleGreen)
              });

            //Drawing the Green Triangle at the bottom right corner of the rectangle
            g.FillPolygon(Green, new Point[]
            {
            new Point( X1Green, Y1Green ), new Point( X1Green,Y2Green), new Point(X2Green,Y2Green)
             });

            //Drawing the Blue Triangle at the bottom left corner of the rectangle
            g.FillPolygon(Blue, new Point[]
            {
                  new Point(X1Blue,250), new Point(X2Blue,250), new Point(X2Blue,180)
            });


        }
    }
}

Кстати, переменные a, b и ci записывали их только для напоминания себе, сколько составляет длина сторон каждого прямоугольного треугольника.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете исправить это так:

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!(Y1Green > 50 || X1Green > 320 || X2Green > 250 || Y2Green > 180))
            {
                timer1.Stop();
                timer2.Start();
                return;
            }

            // Moving the Green Triangle Diagonally to the Light Blue Triangle
            if (Y1Green > 50) { Y1Green -= 3; }
            if (X1Green > 320) { X1Green -= 5; }
            if (X2Green > 250) { X2Green -= 5; }
            if (Y2Green > 180) { Y2Green -= 3; }
            Draw();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            if (!(X1Blue < 450 || X2Blue < 320 || Y1PaleGreen < 180 || Y2PaleGreen < 250))
            {
                timer2.Stop();
                return;
            }
            //Moving our Blue Triangle
            if (X1Blue < 450) { X1Blue += 2; }
            if (X2Blue < 320) { X2Blue += 2; }

            //Moving our Pale Green Triangle
            if (Y1PaleGreen < 180) { Y1PaleGreen += 4; }
            if (Y2PaleGreen < 250) { Y2PaleGreen += 4; }

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