2013-02-24 37 views
5

私は問題を抱えています。とにかくタイマーコマンドに与えられる必要があるイベントを完全には理解していません。オンラインでは何も言わず、何時間も検索しました。だから私はほとんどの人が 'USEREVENT + 1'を使用しているように見えるものを使用しました。私はそれが正しいのか分からないが、私のタイマーが動作していません。私はそれを正しく使用していますか?私のコードは次のとおりです:pygame.time.set_timer confusion?

nyansecond=462346 
nyanint=0 
spin=0 
aftin=452345 

def nyanmusic(nyansecond,nyanint,spin): 
    if nyanint == 0: 
     nyansound.play() 
     nyanint= 1 
    elif nyanint == 1: 
     nyansecond = pygame.time.set_timer(USEREVENT+1,7000) 
    if nyansecond < 200 and spin == 1: 
     spin = 0 
     nyansecond = pygame.time.set_timer(USEREVENT+1,7000) 
    elif nyansecond > 6500 and nyansecond < 100000 and spin == 0: 
     spin = 1 
     nyansoundm.play() 

    return nyansecond,nyanint,spin 

私は実装した2番目のページ(それはうまくいきます)で自分のコードに定義します。 nyansoundを実行しますが、6.5秒(6500ミリ秒)後にnyansoundmを実行しません。私は、より複雑なものに移行する前に、私がパイソンとパイゲームの基礎を学ぶのを助けるためにこのプログラムを作っています。私は、YouTubeに行って貴重な帯域を無駄にすることなく、ニャン猫やその他のループした曲を聴きたいときにも使用できます。しかし、それについて心配しないでください。

ああ、ここでは私は思いませんが、これはあまり重要、私は私のループに入れているコードです:

#music 
     nyansecond,nyanint,spin = nyanmusic(nyansecond,nyanint,spin) 

答えて

8

pygame.time.set_timerレッツ・要約:

pygame.timeを.set_timer(eventid、milliseconds):returnなし

イベント・タイプを指定されたミリ秒ごとにイベント・キューに表示するように設定します。最初のイベントは、時間が経過するまで表示されません。
すべてのイベントタイプには、別々のタイマーが接続できます。 pygame.USEREVENTとpygame.NUMEVENTSの間の値を使用することをお勧めします。あなたはpygame.time.set_timerに渡す引数eventid2432の間の任意の整数でなければなりませんので

pygame.USEREVENTpygame.NUMEVENTSは、定数(2432)です。

pygame.USEREVENT+125ですので、使用すると問題ありません。

pygame.time.set_timer(USEREVENT+1,7000)を呼び出すと、eventidが25のイベントが7000msごとにイベントキューに表示されます。あなたはあなたのイベント処理コードを表示していませんでしたが、私はあなたがすべきこのイベントをチェックしていないと思います。

あなたが見ることができるように、pygame.time.set_timer戻りNoneので、あなたのライン

nyansecond = pygame.time.set_timer(USEREVENT+1,7000) 

nyansecondは常に

if nyansecond < 200 ... 

がある整数に対してそれを比較するNone、ひいてはになりますので、意味がありません。無意味な


サウンドイベント・キューを使用するすべての6.5秒を再生したい場合は、Simpyの呼び出しpygame.time.set_timer(一回!):

PLAYSOUNDEVENT = USEREVENT + 1 
... 
pygame.time.set_timer(PLAYSOUNDEVENT, 6500) 

とあなたのメインループでは、このイベントのイベントキューをチェック:

while whatever: # main loop 
    ... 
    # event handling 
    if pygame.event.get(PLAYSOUNDEVENT): # check event queue contains PLAYSOUNDEVENT 
     nyansoundm.play() # play the sound 
+0

感謝を!これは完全に機能しました。私はタイマーを完全に誤解しました:D。申し訳ありませんが、私はイベントDを使用しません。残念ながら、私は新しい問題を抱えています。私のループは時にはかなり遅いPC上にあるので、タイマーがなくなりイベントが発生するのと同時に 'pygame.event.get(PLAYSOUNDEVENT)'を実行しないことがあります。これを修正する方法はありますか、これは解決できない問題ですか? – Bluetiger6001

+0

さて、私はそれを私の答えにした、私はそれをupvoteだろうが、私はサイトに参加し、十分な評判を持っていない。私が十分になると、私は反抗的にあなたに答えます。ありがとう:) – Bluetiger6001

+0

Upvoted :)素晴らしい答えをありがとう – Bluetiger6001