VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 807|回复: 8

如何消除闪烁

[复制链接]

3

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-18 02:30:02 | 显示全部楼层 |阅读模式
【注】:请大家看完才发言啊

【目的】:我的目的是实现金山背单词那样的滚动字幕

【已经实现的】:我使用双buffer技术实现内存DC拷贝到屏幕DC,实现的是单个象素级别的移动。

【现在的问题】:程序运行后,虽然是单个象素移动,但是看起来还是有一些闪烁。

【分析】:我斗胆分析一下,人眼的视觉频率是24帧,也就是说1秒钟最少要移动24个象素以上(因为我是单个象素移动的),但是对于象金山背单词这种软件来说,如果1秒移动太多象素的话,字移动太快,人家还没看清楚呢...

【我已经尝试的方法】:使用D3D技术(因为现在已经取消DDraw了),绘制2D文字,情况好了不少,人家毕竟是硬件处理嘛,但是查看资源管理器,程序运行CPU的占用率竟然是50%,不能忍受...

请大家集思广益一下吧
回复

使用道具 举报

0

主题

30

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-4-21 22:30:01 | 显示全部楼层
直接写汇编代码应该是最快的...
回复

使用道具 举报

0

主题

24

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-4-22 09:15:02 | 显示全部楼层
单个象素移动?!
回复

使用道具 举报

3

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-4-22 14:00:01 | 显示全部楼层
TO:lixiaof6471

就是指象素级别的移动,每次向前移动1象素
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-4-23 06:00:02 | 显示全部楼层
你在ie里面用鼠标中键的功能试试(我是在firefox里试的),在多字的情况下,还是会有闪烁的,gdi就是不够快,我说的是有时候,大多数时候是够快的,这是注定了的事,我想如果用汇编的话,和d3d使用cpu率差不多,又要马儿跑又要马儿不吃草好像很难做到。还有,电脑的刷新率不像电视是24帧,而是30帧,在现代游戏的最低要求都是30才能做到不闪烁。在像素很多情况下,尤其是像大块文字这种几乎90%以上的像素都要改变,也没有什么裁剪技术可用,唉,事实就是如此,很难做到不闪烁。游戏能做到不闪烁,裁剪技术是一个很重要的因素。
我是这么说的,但是不乏牛人,天才什么的,我期待楼下有人能有天才的想法。
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-4-23 07:45:01 | 显示全部楼层
不是“不闪烁”是“不丢帧”
更正!
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-23 11:30:01 | 显示全部楼层
创建一个单独的窗口,把文字先绘制上去,然后移动这个窗口就行了.

或你参考一下ScrollDC就个GDI函数
回复

使用道具 举报

3

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-4-23 12:00:02 | 显示全部楼层
谢谢楼上朋友的提示,希望我的描述大家还能看懂意思 :)
回复

使用道具 举报

3

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-4-23 14:30:01 | 显示全部楼层
TO:2511718
我觉得你说的,会增多窗口,导致大量的OnPaint()调用,可能...
不过我会试一下
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表