Можно ли двигать BackgroundImage в Windows Form или создать аналогию движущегося заднего фона?

Можете ли подсказать, как можно двигать BackgroundImage в форме, на лево или в право ?

Уточняю: Я знаю, что можно создать PixtureBox, отодвинуть его в самую заднюю часть и двигать плюсуя или минусуя параметры Left или Right. Однако, это лишает возможности ставить картинки с прозрачным фоном и тем создавать объекты не стандартной формы. Они будут просто отображаться некорректно. Поэтому этот метод не предлагать.


Ответы (1 шт):

Автор решения: Vlad

Короче, сделал следующее, может кому пригодится.

В форме создал event под названием paint.А также два параметра для начальных координат и объект класса Image. После в ивенте Paint следующим образом отрисовал/сгенерировал задний фон. В координатах икс 0 и икс 1210, в обоих случаях с игреком 0, поставил картинку level_1_background. Поставил дважды потому, что игровой уровень длиннее чем 1210 и будет заметно как она двигается.

  Image Level_1_bg = Properties.Resources.level_1_background;
  int b1 = 0, b2 = 1210;
        private void Level_1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(Level_1_bg, b1, 0);
            e.Graphics.DrawImage(Level_1_bg, b2, 0);

        }

После написал функцию, который каждый раз бы менял координаты генерации, то есть b1 и b2.А после вызывал метод Invalidate, что "обновляет" генерацию.

Вот сама функция. Тут думаю понятно.

 void background_move()
        {
            if (b1 < -1210)
            {
                b1 = 1210;
            }

            if (isRight)
            {
                b1 -= backgroundSpeed;
                b2 -= backgroundSpeed;
            }
            if (b2 < -1210)
            {
                b2 = 1210;
            }
            Invalidate();
        }

И всё. Фон двигается в нужную нам сторону, с нужной скоростью. При это всё это меньше нагружает систему, чем те же движения PictureBox. Также советую в конструкторе формы включить двойную буферизацию. Это тоже ускорит процесс генерации фона и соответственно и движение будет менее заметным. Делается это следующей командой.

this.DoubleBuffered = true;
→ Ссылка