C#图形重画
我正在用C写一个小游戏。事实上,每次用户根据鼠标位置移动鼠标(或仅每n毫秒)时,它都必须绘制圆滑的圆圈。问题是,我必须每一段时间都重新绘制整个pictureBox。我知道有.Invalidate()和.Refresh()选项可供选择,但似乎每次我需要重新绘制某些内容时,都需要重新创建图形对象,这种情况每秒钟都会发生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;
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看起来很有趣。无论如何,谢谢你:)