Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#图形重画_C#_User Interface_Graphics_Dispose_Redraw - Fatal编程技术网

C#图形重画

C#图形重画,c#,user-interface,graphics,dispose,redraw,C#,User Interface,Graphics,Dispose,Redraw,我正在用C写一个小游戏。事实上,每次用户根据鼠标位置移动鼠标(或仅每n毫秒)时,它都必须绘制圆滑的圆圈。问题是,我必须每一段时间都重新绘制整个pictureBox。我知道有.Invalidate()和.Refresh()选项可供选择,但似乎每次我需要重新绘制某些内容时,都需要重新创建图形对象,这种情况每秒钟都会发生 private void redrawCircles(int distance) { prevdist = distance / 5;

我正在用C写一个小游戏。事实上,每次用户根据鼠标位置移动鼠标(或仅每n毫秒)时,它都必须绘制圆滑的圆圈。问题是,我必须每一段时间都重新绘制整个pictureBox。我知道有.Invalidate()和.Refresh()选项可供选择,但似乎每次我需要重新绘制某些内容时,都需要重新创建图形对象,这种情况每秒钟都会发生

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();
}
私有void重绘圆(int distance)
{
prevdist=距离/5;
g=Graphics.FromImage(pictureBox1.Image);
对于(int i=0;i
其中g是: 公共静态系统.Drawing.Graphics g

在MouseMove事件处理程序中调用redrawCircles,我计划在Timer.Tick事件处理程序中对其进行校准。所以经常打电话。重新创建图形对象似乎无效。
在这种情况下,我真的需要重新创建图形对象吗?还是有一种更简单的方法?

有一种更简单的方法。使用XNA。学习曲线是陡峭的,但你很快就会把这样的东西抽象出来。如果你想要更有效的东西(我认为更简单),那就使用吧。我会远离XNA,就像它是瘟疫一样。XNA不再开发,Windows 8或Windows RT环境不支持XNA。我还将为简单的2D图形提供SFML,有很多东西需要学习。。。好的,WPF看起来很有趣。无论如何,谢谢你:)