|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而java是公开了。办理|闪灼|成绩 自从米格的仁兄向我保举C#以后,偶就迷途知返的垂垂离开了Java阵营。比来在写工具的时分,溘然发明了一个陈词滥调的闪灼成绩,要晓得如许的成绩在JavaSwing里只需把DoubleBuffer设置为true基础上是不会产生的,但在C#上却怎样也弄不定,居然连双缓冲都有成绩,GDI+不会这么懦弱吧。
偶再一次被微软的花头给嘲谑了,无法只好踏上了漫漫搜刮之路,也不晓得搜了几帖子,找了几材料,基础上都是无功而返,更可气的是网上有些材料还哄人,偶试了试基础上都不可的,该闪的还是闪的欢。有些办法像脏矩阵一样要Invalide部分更新地区,偶嫌他贫苦,幸亏偶找到了一篇文章,讲闪灼道理的,固然偶已往自以为懂得闪灼道理,好比甚么革新周期,显存之类的,不外偶仍是耐着性质看了一遍,劳绩颇丰,看来孔夫子的温故而知新很有事理!
因而偶依照道理本人改起了代码,没想到还真让我给办理了。C#控件之以是会闪灼,是由于Refresh会把全部控件给清成背景致,然后再把图象绘制上往,就算先把一切待画的图象绘制到缓冲上,然后再Render到控件上,由于清屏时的色彩,相称于两头插了一空缺帧,当革新过快时也是会有闪灼的。
偶的做法是:
1.每帧控件创立一个Graphics,记得必定是CreateGraphics而不是经由过程Paint函数的谁人参数e取得。
2.把待绘制的图象绘制到缓冲上,缓冲巨细为控件巨细。
3.革新的时分挪用Invalidate(newRectangle(0,0,1,1));
4.在Paint函数绘制缓冲,弄定!
哈哈,信任人人看了城市懂得,Invalidate(newRectangle(0,0,1,1));相称于挪用Paint函数,但却不重绘控件,如许两头谁人空缺帧就没有了,闪灼固然就消散啦!
道理很主要啊很主要!
如果英语好,口才好,加上女孩子的优势说不定有机会进去做做别的工具) |
|