2012-04-10 66 views
2

我正在制作一个2D方块游戏,现在是制作好地图编辑器的时候了。使用picturebox或类似控件制作2D图块编辑器

早些时候,我尝试使用DataGridView,但它竟然是superslow。

我想出应该有另一种方式来绘制瓷砖(实际图像或彩色背景)及其参数(文本)。图片框!

有没有简单的方法来访问像素的2D阵列,在所需的坐标插入瓷砖图像,获得指针坐标和所有的东西,或者我应该尝试使用完全不同的方法?

+0

还有约图像转换为地图[链接]一个有用的职位(http://stackoverflow.com/q/10127871/1306322) – user1306322 2012-04-12 19:00:25

回答

5

使用任何控件网格将超级低。绘制网格的正确方法是绘制网格。

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

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

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

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

更新

这里是一个非常原始的例子,让你开始: http://pastebin.com/DseuN56y

+0

我添加了一个链接到我鞭打的例子。 – Tergiver 2012-04-10 17:57:55

+0

太棒了!谢谢,这看起来就像我想象的那样。 – user1306322 2012-04-10 18:41:51