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

Источник: http://csharphelper.com/blog/2015/02/make-a-bouncing-ball-animation-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector