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

 

 

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

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);

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

 

 

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

Упражнения

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