在我们上一节代码写完后启动窗体会发现绘制的墙体总是闪烁,这是因为每一帧地图都在重新绘制,而每一帧除了绘制墙体之外还会给地图刷一层黑色来重置地图,由于刷新地图和绘制墙体属于先后顺序,所以在窗体显示中墙体会被覆盖然后又重新出现,这时候我们可以定义一个临时使用的图片,将刷新后的背景和新绘制的墙体全部先绘制到图片上,然后将图片一次性绘制到窗体画布上,这样就不会出现黑色背景和墙体交替出现的情况了。
首先需要定义一个图片变量
private static Bitmap bmp;//创建一个bitmap图片变量
然后给图片变量实例化设置大小
bmp=new Bitmap(450,450);//实例化图片,确定图片大小
用画布类中的方法将这个临时图片转换为临时画布方便绘制
Graphics bmpg = Graphics.FromImage(bmp);//将创建的图片生成一个画布
将原本绘制函数传过去的画布变量改成这张临时画布
tankthread.g = bmpg;//让游戏运行类中的g也获取到当前窗体画布组件
最后,在临时画布绘制调用一次后在窗体画布上将临时画布绘制的图片一口气绘制出来,此操作在每帧调用一次的位置
g.DrawImage(bmp,0,0);//将绘制的图片绘制到窗体画布上
将窗体画布和临时图片全部变成static静态类型方便后续调用