【发布时间】:2020-07-06 10:51:36
【问题描述】:
我在窗口窗体上绘制了一个小迷宫,并在每次按键事件时重新绘制它。我怎样才能使它更顺畅?绘图持续约。一秒钟,当您输入箭头按钮时,您会在表单上看到短暂的闪烁。
public void Draw_Labyrinth()
{
this.Update();
this.SuspendLayout();
Controls.Clear();
for (int i = 0; i < list_Elements_Y.Count; i++)
{
for (int j = 0; j < list_Elements_Y[i].list_Elements_X.Count; j++)
{
PictureBox pb = new PictureBox();
pb.Location = list_Elements_Y[i].list_Elements_X[j].position;
pb.Name = list_Elements_Y[i].list_Elements_X[j].name;
pb.Size = list_Elements_Y[i].list_Elements_X[j].size;
if (pb.Location == characterPosition)
{
pb.Image = Properties.Resources.character;
}
else if (pb.Name == "item")
{
pb.Image = Properties.Resources.item;
}
else if (pb.Name == "wall")
{
pb.Image = Properties.Resources.wall;
}
Controls.Add(pb);
Application.DoEvents();
this.Update();
}
}
Application.DoEvents();
this.ResumeLayout();
}
非常感谢!
【问题讨论】:
-
您是否将
DoubleBuffered设置为true? -
您可能正在逐个绘制每个精灵,尝试将静态环境批处理为一个图片框。
-
直接分段绘制到单个图片框...而不是使用一系列图片框控件
-
我将 DoubleBuffered 设置为 true,这行得通!现在好多了!不完美,但更好 - 谢谢
-
“重新绘制”意味着(对于大多数人)“在单个设备上下文/图片/位图上绘制”,代码显示重新创建了一大堆控件。绝对不会期望创建控件会以惊人的速度工作(绝对不会期望每次击键都会发生),创建大量控件可能会很慢。