Сделайте анимацию анимации в C#
В этом примере показано, как сделать анимацию ограничивающего шара. Когда форма загружается, выполняется следующий код.
// Некоторые параметры рисования.
private const int BallWidth = 50;
private const int BallHeight = 50;
private int BallX, BallY; // Должность.
private int BallVx, BallVy; // Скорость.
// Инициализируйте некоторые случайные вещи.
private void Form1_Load(object sender, EventArgs e)
{
// Выберите случайную начальную позицию и скорость.
Random rnd = new Random();
BallVx = rnd.Next(1, 4);
BallVy = rnd.Next(1, 4);
BallX = rnd.Next(0, ClientSize.Width - BallWidth);
BallY = rnd.Next(0, ClientSize.Height - BallHeight);
// Используйте двойную буферизацию для уменьшения мерцания.
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer,
true);
this.UpdateStyles();
}
Этот код инициализирует положение шара и скорость для случайных значений. Он также включает стиль DoubleBuffer формы, чтобы уменьшить мерцание.
Когда Timer формы запускает свое событие Tick, следующий код перемещает мяч.
// Обновляем положение мяча, при необходимости отскакивая.
private void tmrMoveBall_Tick(object sender, EventArgs e)
{
BallX += BallVx;
if (BallX < 0)
{
BallVx = -BallVx;
Boing();
} else if (BallX + BallWidth > ClientSize.Width)
{
BallVx = -BallVx;
Boing();
}
BallY += BallVy;
if (BallY < 0)
{
BallVy = -BallVy;
Boing();
} else if (BallY + BallHeight > ClientSize.Height)
{
BallVy = -BallVy;
Boing();
}
Refresh();
}
Этот код добавляет скорость шара (в пикселях за интервал таймера) в положение мяча. Если мяч пересекает ребро формы, код переключает компонент скорости в соответствующем направлении (в зависимости от того, к какому краю он попал). Он также вызывает метод Boing, описанный ниже.
После перемещения шарика код аннулирует форму, чтобы следующий обработчик события Paint перерисовал мяч в новом положении.
// Нарисуем мяч в текущем местоположении.
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.Clear(BackColor);
e.Graphics.FillEllipse(Brushes.Blue, BallX, BallY,
BallWidth, BallHeight);
e.Graphics.DrawEllipse(Pens.Black, BallX, BallY,
BallWidth, BallHeight);
}
Когда мяч попадает на край формы, следующий Boing метод воспроизводит аудио ресурс.
// Воспроизведение ресурса звукового файла boing.
private void Boing()
{
using (SoundPlayer player = new SoundPlayer(
Properties.Resources.boing))
{
player.Play();
}
}
Этот код просто создает новый SoundPlayer, связанный с аудиоресурсом, и вызывает метод Play игрока.
