На главную

Анимация. Отскок шарика от стен

Lighting/Colors

В текущей демо-сцене требуется создать шарик который движется отскакивая от стен. Все движения происходят под 45°

Объявим переменные необходимые для данной демо-сцены.

  bool IsMovingLeft = false; // шарик двигается влево?
  bool IsMovingUp = false; // шарик двигается вверх?
  float BallX = 100; //текущая координата шарика по Х
  float BallY = 100; // текущая координата шарика по Y
  float BallRadius = 30; // радиус шарика для отрисовки
  float Speed = 2; // скорость шарика

Обновим позицию шарика с учетом флагов IsMoving. В случае соприкосновения с одной из стен - переключим флаг на противоположный.

BallX += IsMovingLeft ? -Speed : Speed;
BallY += IsMovingUp ? -Speed : Speed;

if (BallX >= (ClientRectangle.Width - BallRadius) || BallX <= BallRadius)
    IsMovingLeft = !IsMovingLeft;

if (BallY >= (ClientRectangle.Height - BallRadius) || BallY <= BallRadius)
    IsMovingUp = !IsMovingUp;
    

Отрисуем шарик и обводку для него.

gr.FillEllipse(Brushes.Blue, BallX - BallRadius, BallY - BallRadius, BallRadius * 2, BallRadius * 2);
gr.DrawEllipse(Pens.Black, BallX - BallRadius, BallY - BallRadius, BallRadius * 2, BallRadius * 2);

Вставив и запустив данный пример мы увидим следующую анимацию:

Исходный код данного примера вы можете найти здесь

Упражнения

  • Сделать несколько летающих шариков
  • Сделать несколько летающих объектов (шарик, квадратик), с разными цветами и разной скоростью
HI