我正在用C#编写Conway的《人生游戏》的实现。这是我用来绘制网格的代码,它在我的panel_Paint事件中。 g是图形上下文。

for (int y = 0; y < numOfCells * cellSize; y += cellSize)
{
     for (int x = 0; x < numOfCells * cellSize; x += cellSize)
     {
          g.DrawLine(p, x, 0, x, y + numOfCells * cellSize);
          g.DrawLine(p, 0, x, y + size * drawnGrid, x);
     }
}

当我运行程序时,它直到完成网格绘制都无响应,这在numOfCells = 100&cellSize = 10时花费了几秒钟。删除所有乘法运算会使其更快,但速度却不是很高。

有没有更好/更有效的方法来绘制网格?

谢谢

最佳答案

问题是您要为每个Y坐标绘制X线。您可以首先通过在一个循环中渲染Y线,然后在另一个循环中渲染X线来简化。

这是一个简单的例子

  for (int y = 0; y < numOfCells; ++y)
  {
    g.DrawLine(p, 0, y * cellSize, numOfCells * cellSize, y * cellSize);
  }

  for (int x = 0; x < numOfCells; ++x)
  {
    g.DrawLine(p, x * cellSize, 0, x * cellSize, numOfCells * cellSize);
  }

随着进度的进行,您可以使用双缓冲来减少闪烁等。看看Control.SetStyle

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setstyle.aspx

10-08 14:06