2017-06-08 34 views
2

我正在与pyglet和我发现pyglet.clock.tick()返回什么奇怪。pyglet.clock.tick不工作

pyglet.clock.tick()工作不正常,返回的值与经过的时间不同。

  • 的更新间隔为1/60=0.0625
  • 输出值应为:0.0625

main.py:

import pyglet 

window = pyglet.window.Window() 

def update(*args): 
    pass 

@window.event 
def on_draw(): 
    dt = pyglet.clock.tick() 
    print(dt) 

    # rendering 

pyglet.clock.schedule_interval(update, 1.0/60.0) 
pyglet.app.run() 

输出:

0.00023519893125589775 
0.00023904764104010212 
0.0006876361481085169 
0.00020056054319805838 
0.00024161344756334913 
0.00023306075915385804 
0.00038358807515770366 
0.00021253430697143472 
0.00021167903813035238 
0.00019927763993665693 
0.00024204108198366825 
+0

NameError:名字 '无锡新区' 没有定义。将wnd.event更改为window.event。请在发布之前亲自测试您的代码。 – marcolz

+0

修正它wnd =窗口明显 – AFrogCat

+0

如果我错了,纠正我,但'pyglet.clock.tick()'返回执行'tíck()'的最后一次,而不是计划任务之间的延迟。我假设你想看看'update()'执行的频率,每隔'0.0625'秒应该执行一次?但这不是'.tick()'返回的结果,它返回的atm是你的代码可以迭代渲染循环的速度,这个循环大概每0.0002秒。您可以使用它来抵消渲染逻辑中的延迟。例如,如果玩家每秒钟的移动速度被延迟,您可以通过提示剔与任务差异来抵消它。 – Torxed

回答

2

你已经使用了每帧两次的时钟。

dt传递给update函数。 如果使用pyglet.clock.schedule_interval,则不要在的更新中调用pyglet.clock.tick(),它将返回自上次schedule_interval以来的经过时间。

这是怎么了你目前的时间测量的作品:

0s      1/60s     2/60s     3/60s 
|-----------------------|-------|---------------|-------|---------------| 
         <your dt>    <your dt> 

的代码应该是:

import pyglet 

window = pyglet.window.Window() 

def update(dt): 
    print(dt) 

    # rendering 

pyglet.clock.schedule_interval(update, 1.0/60.0) 
pyglet.app.run()