自去逍遥微信群问答
蠕虫现象
历史档案 · 保留原帖文字 · 17 条回复
翻到一个我爬楼铁哥回复时没看到过的小帖子……
﹌
宇宙之铁|12.05.23 08:54|看Ta|文摘
在Prox的故乡,一个美丽而遥远的星球,计算设备早已没有了屏幕显示的概念。一切图像都以思想的速度在脑海中呈现!多么美好啊!可是,自从来到地球这个落后的星球,落后的科技使他不得不重新考虑很多问题。缓慢的屏幕图像刷新速度就是问题之一。
好比下面这样一段代码。虽然能够正确地显示图像,却伴随着令人头晕的屏幕闪烁。而且那些小方块会按着顺序一个接一个的出现,纺若一条小虫(Profx很不喜欢的一种食品)!
voidCMyView::Draw(constTRect&aRect)const
{
CWindowGc&gc=SystemGc();
TRectrect=Rect();
gc.Clear(rect);
for(inti=0;i100;i+=2){
***rawRect(TRect(TPoint(i,i),TSize(50,50)));
}
}
怎么会这样呢?很简单,直接往屏幕上画图的速度是很慢的。这个问题在制作动画的时候尤其明显,因为我们可能要在一秒中之内刷新屏幕几十次。如果按每秒二十五屏的速度来刷新的话,就意味着我们要在一秒中之内画一千多个小方块!
Profx通过中央电脑查到古时候有一种叫做DoubleBuffering的办法可以解决这个问题。其实很简单:
一、在内存里生成一个和屏幕同样大小的buffer
二、在内存里(Off-screenBuffer)画图
三、把Off-screenBuffer画到屏幕上
这样做的好处有二:
一、写内存远比写屏(IO)快多了
二、无论所画图形有多复杂,我们只需要做一次IO操作!
下面我们来看看具体做法:
一、在你的mmp文件里加这么几行:
LIBRARYfbscli.lib
LIBRARYbitgdi.lib
二、假设你的Viewclass叫做CMyView。在MyView.h里加入:
#includefbs.h
...
private:
CFbsBitmap*iOffScrnBmp;
CFbsBitmapDevice*iOffScrnBmpDevice;
CFbsBitGc*iOffScrnContext;
三、在MyView.cpp里加入:
voidCMyView::ConstructL(constTRect&aRect)
{
...
iOffScrnBmp=new(ELeave)CFbsBitmap;
User::LeaveIfError(iOffScrnBmp-Create(Size(),EColor4K));
iOffScrnBmpDevice=CFbsBitmapDevice::NewL(iOffScrnBmp);
User::LeaveIfError(iOffScrnBmpDevice-CreateContext(iOffScrnContext));
}
说明一下。上面的代码除了生成了我们所需的Off-screenBuffer,即一个4096色的CFbsBitmap之外,还在它上面加了一个iOffScrnContext。这个东西(CFbsBitGc)是我们用来往我们的buffer上面画图用的工具。
继续:
CMyView::~CMyView()
{
deleteiOffScrnBmp;
deleteiOffScrnBmpDevice;
deleteiOffScrnContext;
}
voidCMyView::Draw(constTRect&aRect)const
{
//把我们的buffer清空
iOffScrnContext-Clear(Rect());
//在buffer里画方块,而不是在屏幕上
for(inti=0;i100;i+=2){
iOffScrnContext-DrawRect(TRect(TPoint(i,i),TSize(50,50)));
}
//一次性把buffer画到屏幕上
CWindowGc&gc=SystemGc();
gc.BitBlt(TPoint(0,0),iOffScrnBmp);
}
哈哈!虽然离profx的星球上的技术还有一定差距,至少闪烁和“蠕虫现象”都消失了!Profx觉得,地球这个地方,还是可以继续呆下去的。??
回复
@吹血草 这个都被你翻出来了[惊讶]
[耶]@宇宙之铁 搜索关键词发现还有个没看过的贴,于是一铲子我就把它挖过来[嘿哈]
这个估计大部分人会看的一头雾水
- -
Re 吹血草:"[耶]@宇宙之铁 搜索关键词发现还有个没看过的贴,于是一铲子我就把它挖过来[嘿哈]"
是离屏渲染技术?
没想到是这样的铁哥
我现在看得也糊里糊涂,但我直觉觉得它不得了,所以先翻出来方便加个收藏[捂脸]
- -
Re 宇宙之铁:"这个估计大部分人会看的一头雾水"
@九五 是很早以前我写的诺基亚Symbian系统上的编程教程。那时候这方面资料很少,都靠自己摸索。我的教程还蛮受欢迎的。
这样的教程风格确实很不错,没有平常教程那么枯燥,学起来有意思多了
塞班系统比我印象中的牛啊
还有几篇也蛮有趣,不知遗失到哪儿去啦
其实它是个非常不错的系统,虽然问题挺多,但设计思路很棒
- -
Re 九五:"塞班系统比我印象中的牛啊"
看看你能不能翻出其他那几篇[呲牙]
- -
Re 吹血草:"我现在看得也糊里糊涂,但我直觉觉得它不得了,所以先翻出来方便加个收藏[捂脸]"
我尽力了……我看不出来这几个是不是,不过有人转载“Symbian开发小TIP”系列的代码小故事……
- -
Re 宇宙之铁:"看看你能不能翻出其他那几篇[呲牙]"
@吹血草 这些似乎是篡改过的,拿掉了我那些Profx外星人的小故事,看上去比较乏味
@宇宙之铁 原来如此……
_(:з」∠)_
?我绝不认输.jpg
我翻到了PDF的,似乎是比前面的纂改过的文字多一些[生病]
- 20210817122406.jpg原始图片 · 132.3 KB
附件以原始格式下载。
他们那不是篡改而是阉割了[偷笑]
- -
Re 吹血草:"?我绝不认输.jpg
我翻到了PDF的,似乎是比前面的纂改过的文字多一些[生病]"