Как убрать моргание при реализации анимации? - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace Compound_Pendulum { class Pendulum { public int x, y; // координаты шарика public int x0, y0; // координаты подвеса public int q; // угол отклонения маятника от равновесия public int a; // начальный угол отклонения маятника public double m; // масса маятника public double h; // расстояние от точки подвеса до центра тяжести маятника public double r; // радиус инерции относительно оси, проходящей через центр тяжести public double g; // ускорение свободного падения public double l; // приведённая длина физического маятника public Color BorderColor; // цвет контура public Color BallColor; // цвет шарика public PictureBox pictureBox; // поверхность рисования public int BallSize; // размер шарика public int MaxSize; // максимальный размер public double Radius; public Pendulum(int a, double m, double h, double g, Color BallColor, PictureBox pictureBox, int MaxSize) { this.a = a; this.m = m; this.h = h; this.g = g; this.BorderColor = Color.Black; this.BallColor = BallColor; this.pictureBox = pictureBox; this.MaxSize = MaxSize; BallSize = Convert.ToInt32(m); pictureBox.BackColor = Color.PeachPuff; Radius = h; x = (int)Math.Round(Radius * Math.Cos(Math.PI * a / 180) + MaxSize / 2) - BallSize / 2; y = (int)Math.Round(MaxSize / 2 - Radius * Math.Sin(Math.PI * a / 180)) - BallSize / 2; x0 = MaxSize / 2; y0 = MaxSize / 2; PendulumShow(pictureBox); } public void PendulumShow(PictureBox pictureBox) { Pen borderPen = new Pen(BorderColor, 2); SolidBrush limeSolidBrush = new SolidBrush(Color.Lime); SolidBrush redSolidBrush = new SolidBrush(Color.Red); Graphics graphics = pictureBox.CreateGraphics(); graphics.DrawLine(borderPen, x0, y0, x + BallSize / 2, y + BallSize / 2); graphics.DrawEllipse(borderPen, x, y, BallSize, BallSize); graphics.FillEllipse(limeSolidBrush, x, y, BallSize, BallSize); graphics.DrawEllipse(borderPen, MaxSize / 2 - 10, MaxSize / 2 - 10, MaxSize / 25, MaxSize / 25); graphics.FillEllipse(redSolidBrush, MaxSize / 2 - 10, MaxSize / 2 - 10, MaxSize / 25, MaxSize / 25); } public void PendulumHide(PictureBox pictureBox) { Pen borderPen = new Pen(pictureBox.BackColor, 2); SolidBrush redSolidBrush = new SolidBrush(pictureBox.BackColor); Graphics graphics = pictureBox.CreateGraphics(); graphics.DrawLine(borderPen, x0, y0, x + BallSize / 2, y + BallSize / 2); graphics.DrawEllipse(borderPen, x, y, BallSize, BallSize); graphics.FillEllipse(redSolidBrush, x, y, BallSize, BallSize); } public void PendulumMove() { PendulumHide(pictureBox); x = (int)Math.Round(Radius * Math.Cos(Math.PI * a / 180) + MaxSize / 2) - BallSize / 2; y = (int)Math.Round(MaxSize / 2 - Radius * Math.Sin(Math.PI * a / 180)) - BallSize / 2; PendulumShow(pictureBox); } } }
Решение задачи: «Как убрать моргание при реализации анимации?»
textual
Листинг программы
using System; using System.Drawing; using System.Windows.Forms; namespace Compound_Pendulum { public partial class Form1 : Form { private Timer _timer; private Pendulum _pendulum; private PictureBox _pictureBox; public Form1() { this.SuspendLayout(); _pictureBox = new PictureBox(); _pictureBox.Dock = System.Windows.Forms.DockStyle.Fill; _pictureBox.BackColor = Color.BlanchedAlmond; _timer = new Timer(); _timer.Interval = 50; _timer.Enabled = true; Controls.Add(this._pictureBox); this.ResumeLayout(false); _pendulum = new Pendulum(45, 1, 50, 9.81, Color.Green, 200); _pictureBox.Paint += new PaintEventHandler(_pictureBox_Paint); _timer.Tick += new System.EventHandler(this.timer1_Tick); } private void _pictureBox_Paint(object sender, PaintEventArgs e) { _pendulum.Draw(e.Graphics); } private void timer1_Tick(object sender, EventArgs e) { _pendulum.Move(); _pictureBox.Invalidate(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д