2011-02-25 197 views
1

我正在寫使用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

回答

1

它看起來像一個缺乏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