【问题标题】:Preventing System.Drawing.Graphics from updating防止 System.Drawing.Graphics 更新
【发布时间】:2014-03-08 08:03:28
【问题描述】:

我正在创建一个使用图块系统的 2D 游戏引擎。在绘制这些图块时,您可以看到每个图块都单独绘制在屏幕上。绘图速度非常快,但您仍然可以看到它。

当我告诉图形绘制一些东西时,我不希望它立即更新,因为它还有其他东西要在屏幕上绘制,显然效率很低。我希望它仍然“绘制”我告诉它的内容,但实际上在一次大更新中将其全部显示出来......或者那会做完全相同的事情吗?反正不可能。

//Creating graphics
public static Form GameForm; //Assigned by the form
public static Graphics GFX;

public static void Init()
{
  GFX = GameForm.CreateGraphics();
  GameForm.BackColor = Color.Black;

  // ----

  //Drawing the tiles
  while (X != 480)
  {
    while (Y != 352)
    {
      Tiles.Add(new Tile(X, Y, Num, 0));

       GFX.DrawImage(LoadedImages[4], new Point(X, Y));
       GFX.DrawRectangle(new Pen(Color.Red), X, Y, 32, 32);
       GFX.DrawString(Num.ToString(), new Font("System", 10.0F),
                                      new SolidBrush(Color.Black),
                                      new PointF((float)X, (float)Y));

        Y = Y + 32;
        Num++;
      }
      X = X + 32;
      Y = 0;
    }
    //UPDATE NOW!

【问题讨论】:

    标签: c# winforms graphics drawing tile


    【解决方案1】:

    创建一个与屏幕大小相同的位图。然后调用Graphics.FromImage 来获取一个可以绘制的Graphics 对象实例。将所有内容绘制到该对象中。完成后,使用Graphics.DrawImage 将临时位图复制到屏幕。

    即:

    // Create bitmap
    using (var bmp = new Bitmap(form_width, form_height, GFX))
    {
        using (var g = Graphics.FromImage(bmp))
        {
            // do all your drawing to g
        }
    
        // draw bmp to GFX
        GFX.DrawImage(bmp, 0, 0);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2020-06-27
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多