3

タイルシステムを使用する2Dゲームエンジンを作成しています。これらのタイルを描画しているときは、それぞれが画面上に個別に描画されているのを確認できます。描画は非常に高速ですが、それでも表示できます。

グラフィックに何かを描くように指示するとき、画面上に描くものが他にあり、明らかに非常に非効率的であるため、すぐに更新したくありません。伝えた内容を「描画」したいのですが、実際にはすべてを1つの大きな更新で表示します...それともまったく同じことをしますか?とにかくおそらく不可能です。

//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!
4

1 に答える 1

4

画面と同じサイズのビットマップを作成します。次に、を呼び出して、描画できるオブジェクトインスタンス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);
}
于 2011-11-22T06:43:42.393 に答える