Pygame日期时间的麻烦

时间:2016-10-23 16:14:44

标签: python datetime time pygame pop

我在python中尝试了一些日期时间代码,所以我可以在一段代码上执行time.sleep like function,同时让其他代码运行。 这是我的代码:

import datetime, pygame

pygame.init()
secondtick = pygame.time.Clock()

timestr = str(datetime.datetime.now().time())

timelist = list(timestr)

timex = 1
while timex <= 6:
    timelist.pop(0)
    timex += 1
timex2 = 1

while timex2 <= 7:
    timelist.pop(2)
    timex2 += 1
secondstr1 = str("".join(timelist))

while 1:
    timestr = str(datetime.datetime.now().time())

    timelist = list(timestr)

    timex = 1
    while timex <= 6:
        timelist.pop(0)
        timex += 1
    timex2 = 1
    while timex2 <= 7:
        timelist.pop(2)
        timex2 += 1

    secondstr2 = str("".join(timelist))

    x = 1

    if int(secondstr2) - x == int(secondstr1):
        print(x)
    x += 1

以下是结果:

C:\Python32\python.exe "C:/Users/depia/PycharmProjects/testing/test.py"
Traceback (most recent call last):
  File "C:/Users/depia/PycharmProjects/testing/test.py", line 31, in <module>
    timelist.pop(2)
IndexError: pop index out of range

Process finished with exit code 1

如果我在此处导入时间之后添加time.sleep(1):

    -- code --
    time.sleep(1)
    secondstr2 = str("".join(timelist))
    -- more code --

这是输出:

C:\Python32\python.exe "C:/Users/depia/PycharmProjects/testing/test.py"
1
然后它永远不会结束。它就像永远一样。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用pygame.time.get_ticks来控制时间。

首先将事件延迟1秒(1000毫秒),然后设置

end_time = pygame.time.get_ticks() + 1000 

以后循环检查

if pygame.time.get_ticks() >= end_time: 
    do_something() 

或甚至(每1000毫秒重复一次)

if pygame.time.get_ticks() >= end_time: 
    do_something() 
    end_time = pygame.time.get_ticks() + 1000 
    #end_time = end_time + 1000

这是控制同一循环中许多不同元素的时间的非常流行的方法。

或者您可以使用pygame.time.set_timer()每1000毫秒创建一个自己的事件。

首先设置

 pygame.time.set_timer(pygame.USEREVENT+1, 1000) 

以后循环检查

 for event in pygame.event.get(): 
     if event.type == pygame.USEREVENT+1: 
          do_something()

如果你必须定期做某事

,这很有用

BTW:使用0关闭活动

 pygame.time.set_timer(pygame.USEREVENT+1, 0)