在移动带有背景图像的矩形时,图像会重复自身,而不是重新绘制

时间:2019-06-28 10:46:30

标签: c# winforms

我正在尝试制作一个游戏,其中主要对象英雄(Hero)在地图上移动并杀死敌人。

该对象表示为带有背景图像的矩形。

我已经找到了几种正确导入图像的解决方案,但是似乎都没有一个很好的解决方案,它们都只是在矩形内部重复图像。 更准确地说,有一些“隐藏”的重复图像,当我移动矩形时,它只是将它们显示出来。

   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 :(得分:0)

使用Windows窗体,您需要注意使控件无效和重新绘制。同样,如果使用双重缓冲功能时不时地闪烁表面,则可以防止这种情况发生。

无效: 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