我正在制作一个带有方形图块的 2d 游戏,是时候制作一个好的地图编辑器了。
早些时候我尝试使用 DataGridView,但结果是超级慢。
我想应该有另一种方法来绘制瓷砖(实际图像或彩色背景)及其参数(在文本中)。图片框!
有没有一种简单的方法可以访问二维像素数组、在所需坐标处插入平铺图像、获取指针坐标和所有这些东西,还是我应该尝试使用完全不同的方法?
我正在制作一个带有方形图块的 2d 游戏,是时候制作一个好的地图编辑器了。
早些时候我尝试使用 DataGridView,但结果是超级慢。
我想应该有另一种方法来绘制瓷砖(实际图像或彩色背景)及其参数(在文本中)。图片框!
有没有一种简单的方法可以访问二维像素数组、在所需坐标处插入平铺图像、获取指针坐标和所有这些东西,还是我应该尝试使用完全不同的方法?
使用任何控件网格都将非常慢。绘制瓷砖网格的“正确”方法是……绘制瓷砖网格。
您可以创建自己的控件,将一组图像或索引/键放入图像容器并绘制它们。
从 Control 派生您的自定义控件,而不是 UserControl(UserControl 是一个控件容器,您不需要它,或者如果您想要滚动条,也可以从 ScrollableControl 派生)。重写 OnPaint 方法以执行绘图。使用传递给 OnPaint 的 Graphics 对象,它具有绘制文本、图元和位图的方法。
您可以通过覆盖 MouseDown/Up 来处理用户输入,或者让消费者处理它,但提供一个 HitTest 方法,以便可以将给定的 X、Y 转换为网格索引。
我在这里有一些代码C# Drawing circles in a panel用于绘制椭圆以响应用户输入。从该代码中,您可以看到在控件上绘制某些状态的示例(在这种情况下,控件是表单,但您可以外推到自定义控件)。请注意构造函数中的 SetStyle 调用以消除闪烁。另请注意,当您更改状态时,您不会尝试重绘,您只需 Invalidate 告诉操作系统您需要重绘。
更新
这是一个非常粗略的示例,可以帮助您入门: http: //pastebin.com/DseuN56y