c# - 使用 picturebox 或类似控件制作 2d 平铺编辑器

标签 c# bitmap picturebox

我正在制作一款带有方形图 block 的 2D 游戏,是时候制作一个优秀的 map 编辑器了。

之前我尝试过使用 DataGridView,但结果 super 慢。

我发现应该有另一种方法来绘制图 block (实际图像或彩色背景)及其参数(以文本形式)。图片框!

是否有一种简单的方法来访问二维像素数组,在所需的坐标处插入平铺图像,获取指针坐标以及所有这些内容,或者我应该尝试使用完全不同的方法?

最佳答案

使用任何控件网格都会非常慢。绘制瓷砖网格的“正确”方法是..绘制瓷砖网格。

您可以创建自己的控件,将图像数组或索引/键放入图像容器中并绘制它们。

从 Control 派生自定义控件,而不是 UserControl(UserControl 是一个控件容器,您不需要它,或者如果您需要滚动条,则可以从 ScrollableControl 派生)。重写 OnPaint 方法来执行绘图。使用传递给 OnPaint 的 Graphics 对象,它具有绘制文本、图元和位图的方法。

您可以通过重写 MouseDown/Up 来处理用户输入,或者让使用者处理它,但提供 HitTest 方法,以便可以将给定的 X、Y 转换为网格索引。

我这里有一些代码 C# Drawing circles in a panel用于响应用户输入绘制椭圆。从该代码中,您可以看到在控件上绘制某些状态的示例(这种情况下的控件是表单,但您可以推断到自定义控件)。请注意构造函数中用于消除闪烁的 SetStyle 调用。另请注意,当您更改状态时,您不会尝试重绘,您只是无效,这会告诉操作系统您需要重绘。

已更新

这是一个非常粗略的示例来帮助您入门: http://pastebin.com/DseuN56y

关于c# - 使用 picturebox 或类似控件制作 2d 平铺编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092521/

相关文章:

android - 将位图(RGB_565)转换为灰度(8 位)Android

c# - 具有透明背景的重叠 PicuresBox

c# - 如何在 c# 中对 PictureBox.Image 进行线程安全调用,目前给出 3 个错误之一

c# - 洗牌所需的 IEnumerable 扩展方法

c# - 可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别

c++ - 保存的 Gdiplus::Bitmap 总是有 Alpha channel (RGBA/ARGB)

c# - 一次在十个图片框上显示多张图片

c# - Blue Prism - 命名空间导入

c# - 我可以将 ComboBox 和简单的 Button 嵌入到 WinForms 中的 StatusStrip 中吗?

android - ImageView 中带圆角的位图