1c7 / VideoList

:us: -> :cn: @糖醋陈皮 翻译的视频列表
https://weibo.com/2004104451
57 stars 11 forks source link

弄清Pygame里tick()方法的行为 #18

Open 1c7 opened 11 years ago

1c7 commented 11 years ago
# 放Gist里的话注释都成斜体了  很难看  所以放这里..

import pygame            # 这段练习代码的目的是理解Pygame里的tick()方法 所以当然要导入Pygame了..
from time import sleep   # 我们只需要里面的sleep函数

#################################################
#
# 以下5行代码是为了弄清pygame里tick()方法的行为
# 之前总是对这家伙有点很迷糊的感觉
#
#################################################

clock_obj = pygame.time.Clock()
# 这方法返回的是一个对象
# 这对象有个tick()方法

'''
time_passed = clock_obj.tick()
sleep(1)
time_passed = clock_obj.tick()
print (time_passed)
'''
# tick()方法会返回【从上次调用到这次调用 所过去的时间】 (毫秒)
# 这里的输出是 1000

# 第一次调用时当然返回的是0 (你可以把print语句移到第二句看看, 也就是移到sleep(1)前面)
# 你可以把上面这4行代码的注释去掉 看看效果就清楚了

#######################################
#
# 关于tick()方法的可选参数
#
#######################################

# http://www.pygame.org/docs/ref/time.html#pygame.time.Clock.tick
# 帧率 = 刷新率 = 某段代码在1秒内运行多少次

# tick() 方法有个可选的参数  这个参数接收数字  代表每秒运行的频率(或者说帧率, 刷新率)
# 这个方法要放在循环里才有用  不然的话没什么作用
# 比如你传入的是1  也就是每秒运行1次 或者说帧率是1
# 它会先运行一遍  然后当再次运行到tick(1)时 它会延时(就像sleep()一样)
# 延时时间是1秒  然后接着运行

# 它的内部也许就是用sleep实现的...(没找到源码 这只是猜测)
# sleep(1000/数字参数)

# 下面这个例子可能更直观些

while True:
    clock_obj.tick(1)
    print ('aaa')

# 它会每秒输出一次aaa