在.net的控件上用timer控制刷新图像,可以形成动画效果,但是有个问题就是会闪烁。
比如picturebox控件名字是picshow,我们要刷新picshow的图像,一般是怎么做呢?
一般是用Graphics对象的clear来清除,然后将要画的东西一点点画上去。这样的方法中间存在一个clear过程,导致会有一瞬间的闪烁。
一个简单的解决方法是不用clear:先创建位图,然后将要画的东西画到位图上,最后把位图整个画到picshow上。这样子会好很多。
下面给一段示例代码
public void GameShow() //画出游戏画面
{
//创建位图
Bitmap bmp = new Bitmap(600, 600);//位图大小600*600
//创建位图的Graphics对象
Graphics gr1 = Graphics.FromImage(bmp);
//将位图清黑
gr1.Clear(Color.Black);
//在位图上画出要画的东西
if (myBall != null)
{
myBall.Show(gr1);
}
for (int i = 0; i < bullnum; i++)
{
if (bull[i] != null) bull[i].Show(gr1);
}
if (a != null)
{
a.Show(gr1);
}
//创建Picshow的Graphics对象
Graphics gr2 = PicShow.CreateGraphics();
//将bmp画到picshow上
gr2.DrawImage(bmp, 0, 0);
//释放内存!!这一步必须要,不然内存会爆炸的
bmp.Dispose();
bmp = null;
gr1.Dispose();
gr1 = null;
gr2.Dispose();
gr2 = null;
}