Анимация зрачков - 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)));
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы