所以我试图在我正在构建的游戏中产生一个类似频闪的效果,而我现在的方式,它破坏了我的帧速率,因为睡眠函数也适用于绘图函数。有人能解释为什么会这样吗?我无法理解的逻辑。为什么我不能每.5秒返回一次,而不影响色调函数中的.1睡眠?你知道吗
下面是一个粗略的演示代码的功能。你知道吗
from random import randint
import time
def rand_intr():
r = randint(1,256)
time.sleep(.5)
return r
def rand_intg():
g = randint(1,256)
time.sleep(.5)
return g
def rand_intb():
b = randint(1,256)
time.sleep(.5)
return b
def hue():
r = rand_intr()
g = rand_intg()
b = rand_intb()
print(r, g, b)
print('test')
time.sleep(.01)
while True:
hue()
sleep
函数阻塞主线程。这意味着rand_intg
在rand_intr
从睡眠中“唤醒”之前不会运行。 类似地,rand_intb
必须等待rand_intg
,hue
必须等待前面3个函数。这意味着hue
必须等待的总时间至少是完成rand_intr
、rand_intg
和rand_intb
所需的时间。你知道吗如果我们稍微修改一下您的示例并查看输出,我们可以理解发生了什么。你知道吗
在这里,我只是修改了您的函数,以便在进入和退出每个函数时打印一条消息。你知道吗
输出为
在这里,可以清楚地看到每个
sleep
对hue
的影响。在前面的函数完成之前,您无法打印rgb值或“test”。你知道吗您可以使用计时器回调定期调用
hue
函数,然后根据某种模式修改rgb值。看到这个问题了吗 executing periodic actions有关如何使用基本的基于时间的机制定期执行函数的示例。你知道吗编辑
基于你对@jasonharper的评论
如果每60秒调用一次
hue
,那么对生成随机rgb值的函数的调用以更快的速度发生是没有意义的,因为在hue
中不会看到中间时间的任何更改。你知道吗你能做的就是每60秒调用
hue
,然后生成你的rgb值,让它有任何模式。你知道吗我在上面链接的帖子中用@kev修改了答案
现在您应该只调用
update
一次,可能是在代码的某个启动部分,并删除函数中对sleep
的所有调用。你知道吗相关问题 更多 >
编程相关推荐