私は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;
redrawCircles は MouseMove イベント ハンドラで呼び出され、Timer.Tick イベント ハンドラで呼び出す予定です。だからよく呼ばれる。Graphics オブジェクトを再作成しても効果がないようです。その状況で本当に Graphics オブジェクトを再作成する必要がありますか、それとももっと簡単な方法がありますか?