C#Graphics重绘

时间:2013-09-16 19:43:51

标签: c# user-interface graphics dispose redraw

我正在使用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对象,还是有一种更简单的方法?

0 个答案:

没有答案