为了澄清我的问题的意思。我在使用 .NET 框架在 C# 中制作游戏时习惯于实现我自己的 DrawScene() 方法,并在我想重绘游戏图形时调用它(基本上是在任何实例之后游戏已经移动或改变了它的形状/状态),如下所示:
private void DrawScene()
{
Graphics g = this.CreateGraphics();
g.Clear(Color.Black);
g.DrawImage(myBitmap, 0, 0);
g.Dispose();
}
通过这样做,在我的 Paint 事件处理程序中,我所做的一切如下:
private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawScene();
}
例如,当我想在玩家移动后重绘时,我只需以相同的方式调用 DrawScene():
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Keycode == Keys.Up)
{
hero.y -= 5;
}
DrawScene();
}
这样做或这样做之间有什么严重的区别(我注意到大多数人都遵循):
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.Black);
e.Graphics.DrawImage(myBitmap, 0, 0);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Keycode == Keys.Up)
{
hero.y -= 5;
}
this.Invalidate();
}
抱歉,如果这话太多了,但我只是想澄清一下我的问题..
因此,如果上述两种情况的绘图方式完全相同(从图形的角度来看),并且像第一种情况一样保持我通常的实现没有任何危害。那么什么时候最好使用 invalidate() 方法?