Анимация зрачков - C#
Формулировка задачи:
Ребята, кто знает, подскажите, как на C# создать такого человечка с глазами, чтобы зрачки его глаз меня свое расположение в зависимости от расположения курсора мыши на экране. Т.е. где расположен курсор, туда они и смотрят..
Решение задачи: «Анимация зрачков»
textual
Листинг программы
public partial class Form1 : Form { public Form1() { InitializeComponent(); SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true); Application.Idle += new EventHandler(Application_Idle); } void Application_Idle(object sender, EventArgs e) { UpdateState(); Invalidate(); } private void UpdateState() { PointF mouseLocation = (PointF)this.PointToClient(Cursor.Position); PointF middlePoint = new PointF(this.ClientRectangle.Width / 2f, this.ClientRectangle.Height / 2f); eyeSize = new SizeF(middlePoint.X - 0.25f * this.ClientRectangle.Width, middlePoint.Y - 0.25f * this.ClientRectangle.Height); originEye1 = new PointF(middlePoint.X - eyeSize.Width / 2f, middlePoint.Y); originEye2 = new PointF(middlePoint.X + eyeSize.Width / 2f, middlePoint.Y); float distance1 = (float)Math.Sqrt(sqr(mouseLocation.X - originEye1.X) + sqr(mouseLocation.Y - originEye1.Y)); float distance2 = (float)Math.Sqrt(sqr(mouseLocation.X - originEye2.X) + sqr(mouseLocation.Y - originEye2.Y)); PointF normal1 = new PointF((mouseLocation.X - originEye1.X) / distance1, (mouseLocation.Y - originEye1.Y) / distance1); PointF normal2 = new PointF((mouseLocation.X - originEye2.X) / distance2, (mouseLocation.Y - originEye2.Y) / distance2); eye1 = new PointF(); eye1.X = originEye1.X + (eyeSize.Width - 20f) * normal1.X / 2f; eye1.Y = originEye1.Y + (eyeSize.Height - 20f) * normal1.Y / 2f; eye2 = new PointF(); eye2.X = originEye2.X + (eyeSize.Width - 20f) * normal2.X / 2f; eye2.Y = originEye2.Y + (eyeSize.Height - 20f) * normal2.Y / 2f; } private float sqr(float v) { return v * v; } protected override void OnPaint(PaintEventArgs e) { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; Draw(e.Graphics); base.OnPaint(e); } PointF eye1, eye2; PointF originEye1, originEye2; SizeF eyeSize; private void Draw(Graphics g) { g.Clear(Color.Black); g.DrawEllipse(Pens.White, originEye1.X - eyeSize.Width / 2f, originEye1.Y - eyeSize.Height / 2f, eyeSize.Width, eyeSize.Height); g.DrawEllipse(Pens.White, originEye2.X - eyeSize.Width / 2f, originEye2.Y - eyeSize.Height / 2f, eyeSize.Width, eyeSize.Height); g.FillEllipse(Brushes.Gray, eye1.X - 5f, eye1.Y - 5f, 10f, 10f); g.FillEllipse(Brushes.Gray, new RectangleF(eye2, new SizeF(10f, 10f))); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д