【问题标题】:What's a good control to use for re/drawing large graphic contents in Windows Forms?什么是用于在 Windows 窗体中重新/绘制大型图形内容的好控件?
【发布时间】: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


【解决方案1】:

这段代码对 O(viewport.Width * viewport.Height) 很奇怪

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); 
    } 
} 

使用 O((viewport.Width + viewport.Height)/32) 的下一个代码

for (int x = 0; x < viewport.Width; x+=32) 
{ 
   graphics.DrawLine(p, x, 0, x, viewport.Height - 1); 
}
for (int y = 0; y < viewport.Height; y+=32) 
{ 
   graphics.DrawLine(p, 0, y, viewport.Width - 1, y); 
}

【讨论】:

    【解决方案2】:

    您可以将 OpenTK 与 GLControl 一起使用。

    【讨论】:

    • 我完全同意。如果您想创建任何类型的游戏,请不要使用 Windows 窗体。这不是成功的坑。您将无法构建任何类型的高级场景。一旦你做了最基本的事情,你就需要重新学习一个新的渲染框架。
    • 是的,GLControl 正是我一直在寻找的那种东西。谢谢~
    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2012-10-20
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多