簡體   English   中英

Pyglet.clock.schedule重要函數調用速度限制

[英]Pyglet.clock.schedule significant function calling speed limitation

我在Pyglet的pyglet.clock.schedule和pyglet.clock.schedule_interval(interval參數低於某個值)的速度上遇到了某些不一致之處,請調用函數。

這兩個命令似乎都顯示了該間隔的一些共同點,它們可以調用該函數。 如果最低速度不是那么低,則可能與硬件性能限制相關聯-最大。 大約每秒調用一個函數30次。

測試代碼和結果如下所示:

import pyglet
from time import time

window = pyglet.window.Window()

last_update = time()

def update(dt):
    global last_update
    print("dt: ", dt)
    print('Measured dt: ', time()-last_update)
    last_update = time()

@window.event
def on_draw():
    dt = pyglet.clock.tick()
    print('Last clock tick: ', dt, "\n")

pyglet.clock.schedule(update)
pyglet.app.run()

樣本結果:

dt:  0.030516604423768356
Measured dt:  0.03125262260437012
dt:  0.0007512663764779326
Measured dt:  0.0
Last clock tick:  0.0007512663764779326 

盡管dt = pyglet.clock.tick()導致召回了update(dt)函數,該函數的dt值聲明與期望的clock.tick()返回值一致, 但第一次調用幾乎總是返回相同的固定dt值 ,表示Pyglet的interval函數調用回調函數的最大頻率約為每秒30-32次。

我不確定是什么會影響如此低的頻率,但我想這樣的性能可能是某種故障的影響。 證據似乎至少是在發行商的樣版程序中使用了較高的幀速率(例如120 FPS)。

它工作如此緩慢的原因可能是什么,pyglet的間隔函數是否可以通過某種固定的方式以相應的給定頻率更新回調函數,而不僅限於每秒適度的〜30? 預先感謝您的幫助。

PS clock.schedule_interval只能在其間隔大約大於1/30時才能進行操作。

PPS打印方法的出現不會影響間隔函數的閾值速度。

嘗試將FPS限制設置為更高的值:

pyglet.clock.set_fps_limit(60)

看起來pyglet在某些情況下默認情況下將此限制設置為一個非常低的值: FPS,Pyglet的刷新率是監視器的一半

它還可以幫助將vsync設置為false:

class Window(pyglet.window.Window):
    def __init__(self, refreshrate):
        super(Window, self).__init__(vsync = False)

編輯:如注釋中指出,不建議使用set_fps_limit。 使用schedule_interval的解決方案看起來像這樣:

pyglet.clock.schedule_interval(self.on_draw, 1.0/60.0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM