Пример #1
0
        GravityPoint newpoint;                          // поле под новые точки
        public Form1()
        {
            InitializeComponent();
            picDisplay.Image       = new Bitmap(picDisplay.Width, picDisplay.Height);
            tbDirection.Value      = 270;                        //значение ползунка с направлением
            tbSpreading.Value      = 100;                        //значение ползунка с разбросом
            trackBar1.Value        = 10;                         //значение ползунка с количеством частиц
            trackBar2.Value        = 10;                         //значение ползунка со скоростью частиц
            picDisplay.MouseWheel += PicDisplay_MouseWheel;
            this.emitter           = new Emitter                 // создаем эмиттер и привязываем его к полю emitter
            {
                Direction        = 270,                          //направление
                Spreading        = 100,                          //разброс
                SpeedMin         = 1,                            //начальная минимальная скорость движения частиц
                SpeedMax         = 10,                           //начальная максимальная скорость движения частицы
                ColorFrom        = Color.Gold,                   //начальный цвет частиц
                ColorTo          = Color.FromArgb(0, Color.Red), //конечный цвет частиц
                ParticlesPerTick = 10,                           //количество частиц за тик
                X = picDisplay.Width / 2,
                Y = picDisplay.Height / 6,
            };

            emitters.Add(this.emitter); // добавляем emitters в список, чтобы он рендерился и обновлялся
            //создаем первый счетчик
            point1 = new GravityPoint
            {
                X = picDisplay.Width / 2 + 100,
                Y = picDisplay.Height / 2,
            };
            //создаем второй счетчик
            point2 = new GravityPoint
            {
                X = picDisplay.Width / 2 - 100,
                Y = picDisplay.Height / 2,
            };

            // привязываем поля к эмиттеру
            emitter.impactPoints.Add(point1);
            emitter.impactPoints.Add(point2);
        }
Пример #2
0
        //при нажатии ЛКМ создаем новый счетчик
        private void picDisplay_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                newpoint = new GravityPoint
                {
                    X = e.X,
                    Y = e.Y,
                };
                emitter.impactPoints.Add(newpoint);
            }
            //при нажатии ПКМ удаляем выбранный счетчик
            else if (e.Button == MouseButtons.Right)
            {
                {
                    int xMouse = e.X;
                    int yMouse = e.Y;

                    for (int i = 0; i < emitter.impactPoints.Count(); i++)
                    {
                        var g = Graphics.FromImage(picDisplay.Image);

                        float gX = emitter.impactPoints[i].X - xMouse;
                        float gY = emitter.impactPoints[i].Y - yMouse;

                        double r = Math.Sqrt(gX * gX + gY * gY); //расстояние от центра точки до мышки
                        if (r < emitter.impactPoints[i].Power / 2)
                        {
                            emitter.impactPoints.RemoveAt(i);

                            break;
                        }
                    }
                }
            }
        }