c# - 移动带有背景图像的矩形时,图像会自行重复,而不是重绘
问题描述
我正在尝试制作一个游戏,其中主要对象 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;
}
}
}
解决方案
使用 Windows 窗体,您需要处理使控件无效和重新绘制控件。此外,如果表面不时闪烁,使用双缓冲可以防止它。
推荐阅读
- pine-script - 在 Pinescript 中获取小数位
- angular - 在 ngFor 中的子组件之间传递值
- css - 停止悬停时完成动画
- java - 使用 Android Room 不使用 allowmainthreadqueries() 的最佳方法是什么?
- python - 在 django 项目中找不到页面(404)
- python - 在 POST 请求后获取响应/返回值(python 请求)
- kubernetes - 为什么几乎所有 helm 包都已弃用?
- c# - 如何将datagridview中单元格的值(布尔值)替换为字符串C#
- python - Dataflow BigQueryBatchFileLoads 无法使用 DirectRunner 找到项目 ID
- ruby-on-rails - Ruby on Rails:在 `responds_to { |f| 中设置内容类型 f.任何`