Можно ли двигать BackgroundImage в Windows Form или создать аналогию движущегося заднего фона?
Можете ли подсказать, как можно двигать BackgroundImage в форме, на лево или в право ?
Уточняю: Я знаю, что можно создать PixtureBox, отодвинуть его в самую заднюю часть и двигать плюсуя или минусуя параметры Left или Right. Однако, это лишает возможности ставить картинки с прозрачным фоном и тем создавать объекты не стандартной формы. Они будут просто отображаться некорректно. Поэтому этот метод не предлагать.
Ответы (1 шт):
Короче, сделал следующее, может кому пригодится.
В форме создал 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;