当我们制作动态的游戏时,需要经常刷新,可能会遇到游戏页面刷新非常厉害的问题。
为了解决刷新的问题。在Windows Form里,常常有多种解决方案:
1.可以采取双缓冲来取消闪烁:
//设置双缓冲画图
this.DoubleBuffered = true;
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
2.当然有一个叫做PictureBox控件加载后,会自动实现双缓冲的效果,游戏画面将不再闪烁。
当游戏图片加载非常频繁时,我们当然希望实现局部的刷新,而不是整张图都刷新,这样效率是多么的低。
如下图,我山寨kingdom rush做的塔防小游戏,当游戏运行时,我们只需要人物动起来,而背景是静止的,不需要刷新的。
怎样实现局部刷新呢?
思想: 第一步,重绘人物移动前的位置;
第二步,人物移动......
第三步,重绘人物移动后的位置;
具体实现,使用invalidate函数来实现,invalidate函数形式有多种,默认的invalidate();是默认刷新整个客户区屏幕,