При перемещении прямоугольника с фоновым изображением изображение повторяется, а не перерисовывается - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать игру, в которой главный объект, герой, перемещается по карте и убивает врагов.

Этот объект представлен в виде прямоугольника с фоновым изображением.

Я нашел несколько решений для правильного импорта изображения, но ни одно из них, похоже, не подходит, все они просто повторяют изображение внутри прямоугольника. Чтобы быть более точным, есть некоторые «скрытые» повторяющиеся изображения, и когда я перемещаю прямоугольник, он просто раскрывает их.

   Image image = new Bitmap(Properties.Resources.Untitled);
   TextureBrush tBrush = new TextureBrush(image);
   g.FillRectangle(tBrush, X, Y, characterWidth, characterHeight);

Когда я рисую только прямоугольник и использую функцию Move, все в порядке, каждый раз, когда я двигаюсь, он перерисовывает себя. Но когда я импортирую фоновое изображение, все становится грязным.

Реализация функции Move:

public void Move(int width, int height, String direction, List<Obstacles.Rectangle> rectangles)
        {
            int oldX = this.X;
            int oldY = this.Y;
            if (direction == "UP")
            {
                this.Y -= 10;
                if (IsCollided(rectangles) || this.Y < 0)
                {
                    this.Y = oldY;
                }
            }
            if (direction == "DOWN")
            {
                this.Y += 10;
                if (IsCollided(rectangles) || this.Y > height)
                {
                    this.Y = oldY;
                }
            }
            if (direction == "LEFT")
            {
                this.X -= 10;
                if (IsCollided(rectangles) || this.X < 0)
                {
                    this.X = oldX;
                }
            }
            if (direction == "RIGHT")
            {
                this.X += 10;
                if (IsCollided(rectangles) || this.X > width)
                {
                    this.X = oldX;
                }

            }


        }

1 Ответ

0 голосов
/ 28 июня 2019

Используя Windows Forms, вы должны позаботиться о том, чтобы лишить законной силы и перерисовать элемент управления.Также, если поверхность периодически мерцает, используя двойную буферизацию, это может предотвратить это.

Invalidate: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.invalidate?view=netframework-4.8

OnPaint: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.onpaint?view=netframework-4.8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...