在Windows窗体中有效地绘制网格

我正在用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

您不需要嵌套循环:

 for (int i = 0; i < numOfCells; i++) { // Vertical g.DrawLine(p, i * cellSize, 0, i * cellSize, numOfCells * cellSize); // Horizontal g.DrawLine(p, 0, i * cellSize, numOfCells * cellSize, i * cellSize); } 

使用网格线创建一个100×100像素的位图图像,并将其显示在图块中。
确保瓷砖之间的接缝不会导致网格空间不连续。

你应该看看XNA。 在渲染窗口而不是WinForm中执行此操作可能会更有效。

XNA是C#的游戏框架。 有关更多信息,请访问http://creators.xna.com/

我知道这已经晚了但是……

 for (int x = 0; x < 20; x++) { for (int y = 0; y < 20; y++) { g.drawRectangle(Pens.Black, x * 32, y * 32, 32, 32); } }