什么';这是一个很好的控件,可用于在Windows窗体中重新绘制大型图形内容
本文关键字:窗体 Windows 新绘制 图形 大型 绘制 用于 控件 什么 很好 一个 | 更新日期: 2023-09-27 18:28:12
我正在为一款基于瓦片的游戏创建一个基本级别的编辑器,所以我正在寻找一种绘制一堆瓦片的好方法/最佳方法,这些瓦片至少等于典型的屏幕分辨率(~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);
}
}
}
这个代码对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);
}
您可以将OpenTK与GLControl一起使用。