Сделайте анимацию анимации в 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 игрока.