我正在使用C#编写一个小游戏。实际上,每次用户根据鼠标位置移动鼠标(或每n毫秒)时,只需要画出可疑的圆圈。问题是,我必须每隔一段时间重绘整个pictureBox。我知道有.Invalidate()和.Refresh()选项,但似乎每次我需要重绘东西时都需要重新创建Graphics对象,这种情况每秒都会发生。
private void redrawCircles(int distance)
{
prevdist = distance / 5;
g = Graphics.FromImage(pictureBox1.Image);
for (int i = 0; i < n - 1; i++)
{
brushes[i] = brushes[i + 1];
}
brushes[n - 1] = BrushFromDistance(distance);
for (int i = 0; i < n; ++i)
{
g.FillEllipse(brushes[i], startX + i * rad, startY + i * rad, 2 * diag - 2 * i * rad, 2 * diag - 2 * i * rad);
}
g.Dispose();
pictureBox1.Refresh();
}
其中g是: public static System.Drawing.Graphics g;
在MouseMove事件处理程序中调用redrawCircles,我打算在Timer.Tick事件处理程序中调用它。所以它经常被调用。重新创建Graphics对象似乎无效。 我真的需要在那种情况下重新创建Graphics对象,还是有一种更简单的方法?