我希望我的程序每x幀完成一項任務。然而,它似乎並不奏效,因爲python中的計時器似乎不準確。我如何獲得這段代碼來遵守我設定的幀率?在python中限制FPS
import time
fps = 5
skipticks = 1/(fps*1.0)
i= 0
nextsnap=time.clock()
print skipticks, fps
while (True):
tim= time.clock()
i=i+1
# this prints the fps
#'print 'Fps at start',i, 1/(time.time()-tim)
# this is the sleep that limits the fps
nextsnap+=skipticks
sleeptime = nextsnap-time.clock()
if (sleeptime>0):
time.sleep (sleeptime)
else:
print 'took too long'
print 'Fps at end:#', i, 1/(time.clock()-tim)
這將產生在我的電腦上:
Fps at end:# 45 4.36627853079
Fps at end:# 46 6.44119324776
Fps at end:# 47 4.53966049676
Fps at end:# 48 4.66471670624
Fps at end:# 49 7.18312473536
Fps at end:# 50 4.34786490268
Fps at end:# 51 6.5263951487
Fps at end:# 52 4.71715853908
Fps at end:# 53 4.59636712435
Fps at end:# 54 6.87201830723
Fps at end:# 55 4.31062740848
爲什麼有被渲染得太快幀?爲什麼fps計數不準確?
你假設你的邏輯立即運行,而不是。 – Blender
如果你在每一幀顯示它,時鐘是什麼時候?您可能必須隨時間測量幀速率,然後調整跳幀,而不是訪問每幀的時鐘。 –
這將是我試圖實施的屏幕抓圖工具。循環中會有一個ImageGrab.grab()。由於我採用屏幕截圖,所以幀率穩定運行非常重要,否則視頻將無法平穩運行 – tarrasch