【发布时间】:2012-03-18 02:03:41
【问题描述】:
我正在为基于图块的游戏创建基本关卡编辑器,因此我正在寻找一种好的/最佳方式来绘制一组至少等于典型屏幕分辨率 (~1080p) 的图块;以一种允许我在必要时快速重绘事物的方式(包括覆盖网格)。
我一直试图通过在 OnPaint 事件中绘图来使用 PictureBox 控件使其工作。起初我认为这可能是一个好主意,直到我意识到当我添加一个简单的网格绘制算法时重绘变得多么缓慢 - 在高分辨率下完成重绘需要几秒钟(尽管仍然小于 1080p)。
我看不出这个解决方案可以很好地扩展以允许我创建一个无延迟的编辑器。有人对使这种半密集图形绘制/重绘成为可能的组件或方法有任何建议吗?
注意:理想情况下,我想使用一个可以放置在面板中的控件,如果面板太大,则面板的自动滚动可以在控件周围进行平移。
绘图代码:
public void DrawLevel(Graphics graphics, Rectangle viewport)
{
SolidBrush b = new SolidBrush(Color.DarkGray);
graphics.FillRectangle(b, 0, 0, viewport.Width, viewport.Height);
}
public void DrawGrid(Graphics graphics, Rectangle viewport)
{
Pen p = new Pen(Color.Black, 1);
for (int x = 0; x < viewport.Width; x++)
{
for (int y = 0; y < viewport.Height; y++)
{
if (x == 0 || (x % 32) == 0)
graphics.DrawLine(p, x, 0, x, viewport.Height - 1);
if (y == 0 || (y % 32) == 0)
graphics.DrawLine(p, 0, y, viewport.Width - 1, y);
}
}
}
【问题讨论】:
-
“在高分辨率下完成重绘需要几秒钟” - 似乎太慢了。怀疑你的算法....发布你的代码
-
在中编辑的绘图代码 - 我已经知道通过将 x 和 y 增加 32 而不是使用模数来绘制网格可能会更快,但我不认为它可以是 i> 在这个规模上有所不同。
标签: c# winforms performance 2d picturebox