2016-10-23 6 views
0

私はPythonで日時コードをいくつか試していたので、あるコードでtime.sleepのような関数を実行し、他のコードを実行させました。ここ は私のコードです:私は右ここに時間をインポートした後、(1)time.sleepを追加する場合Pygame datetime trouble

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 

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 

、ここではその結果である

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

この出力:

C:\Python32\python.exe "C:/Users/depia/PycharmProjects/testing/test.py" 
1 

それは決して終わらない。それは永遠にそれのままです。誰も助けることができますか?

+0

あなたは何をしようとしますか?たぶん 'pygame.time'の使い方と' time.sleep'なしでの作業 – furas

+0

私は、1つの部分が待機するようにしようとしていましたが、残りは実行できます。 Ex。 1つのアニメーションはもう一度再生される前に1秒待っていますが、再生中もまだ移動できます。すべてのwhileループを持つ部分は、時間の秒を分離することでした。 pygame.timeを見ると、pygame.time.delay()以外のものは見えないように見えますが、これはすべてを一時停止します。 – DePianoman

+0

あなたは 'pygame.time.get_ticks'を使うことができますが、その方法は異なります。 1秒(1000ms)を遅らせるには、 'end_time = pygame.time.get_ticks()+ 1000'を設定し、後でループで' pygame.time.get_ticks()> = end_time:do_something() ' – furas

答えて

0

pygame.time.get_ticksを使用して時間を制御できます。

1秒(1000ミリ秒)のためにあなたのイベントを遅らせるには最初のあなたは

end_time = pygame.time.get_ticks() + 1000 

を設定し、以降のループでは、あなたが(すべての1000ミリ秒、それを繰り返す)

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

かさえをチェック

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

同じループ内のさまざまな要素の時間を制御するのは非常に一般的な方法です。


それとも、独自のイベントごとに1000ミリ秒を作成するためにpygame.time.set_timer()を使用することができます。

あなたがところでperiodicaly

何かをしなければならない場合に便利である。まず

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

を設定し、以降のループの中であなたが

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

をご確認ください:イベント

をオフにする 0を使用
pygame.time.set_timer(pygame.USEREVENT+1, 0)