防止屏幕

问题描述:

我正在写使用Qt框架Python中的桌面应用程序上快速移动的物体模糊,它涉及在一个相当快的速度搅打在屏幕上的图像。我这样做是一个非常简单的方法:防止屏幕

  • 对于每个项目,创建与相关图像的Qlabel对象
  • 使用startTimer所
  • timerEvent导致呼叫,看起来像开始每个Qlabel定时器:self.move(self.x()+ SPEED,self.y())其中SPEED是一些小像素。

虽然适用,但即使速度适中(比如每秒500像素),图像(在这种情况下,我使用的是纸牌)看起来真的很痛苦。有很多水平模糊。我认为我可以通过改变计时器关闭的频率来减轻这种影响(这样可以使图像的移动次数减少更多次,或者次数减少更多),但这并没有什么帮助。

谁能解释什么造成这一点,我会如何解决这个问题?我已阅读Motion Blur上的维基百科文章,但没有多大帮助。当有人问我是什么原因造成的时候,我说了一些关于显示器响应时间的事情,但是我并没有相信它,当他们问我“当你玩视频游戏时怎么会发生这种情况?”我无法给出答案。

编辑:按照要求,表现出该问题的玩具程序的here's a paste。作为命令行参数获取映像文件的路径。

+1

运动模糊我们通常你添加了一些计算机图形,使快速移动的物体* *少看痛苦。这是一个高效率的艰难过程,通常(我认为)是通过专用视频卡来处理的。为了真正理解这个问题,我认为我们需要非常详细的说明它的外观以及显示屏上的规格,计算机上的规格,如果您提供了代码,它会有所帮助。在此活动期间进行屏幕截图时,您会得到什么? – Paul 2011-02-25 00:33:34

+0

@Paul很好的问题。当我拍摄截图时,图像看起来非常清晰,所以我认为这绝对是人类在工作中的光学效果。代码本身相当庞大而且很复杂,但是我会看看我是否可以制作一个能够证明问题的小例子程序。 – Coquelicot 2011-02-25 00:47:15

+0

对象看起来有些脱节或混乱吗?扑克牌看起来像是被水平切成了几段。 – Paul 2011-02-25 00:51:13

它看起来像一个缺乏double buffering闪烁。我不确定如何在你的特定工具箱中解决它,但是这应该指向你正确的方向。

+0

谢谢,看起来你完全正确。寻找双缓冲给了我很多工作。不幸的是,我似乎无法找到我正在使用的Qt版本(PyQt4)的任何示例或指南,所以我最终可能会在最后再问一个问题。尽管你已经明确回答了这个问题。 :) – Coquelicot 2011-02-25 04:05:09

+0

**更新**:其实,它有可能是缺乏双缓冲的东西吗?我刚刚在[docs](http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#transparency-and-double-buffering)中读到,“自Qt 4.0以来,QWidget自动双缓冲绘画,所以不需要在paintEvent()中编写双缓冲代码以避免闪烁。“ – Coquelicot 2011-02-25 16:38:36

+0

@Coquelicot,它确实对我来说很像,但就像我说的我对Qt不够了解,所以我承认我可能是错的。你可能在Qt [forums](http://developer.qt.nokia.com/forums)上碰到更好的问题。 – 2011-02-25 20:34:43