2013-02-24 18 views
5

Mam więc problem, nie do końca rozumiem zdarzenie, które musi być przekazane komendom timera, nie mówi w żadnym miejscu online, gdzie szukałem godzin. Więc użyłem tego, co większość ludzi używa "USEREVENT + 1". Nie jestem pewien, czy to prawda, ale mój zegar nie działa. Czy używam go poprawnie? Oto mój kod:zamieszanie pygame.time.set_timer?

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 

Następnie wybieram go do mojego kodu na drugiej stronie zaimplementowałem (co działa poprawnie). Działa na nyansound, ale nie działa nyansoundm po 6,5 sekundy (6500 milisekund). Robię ten program, aby pomóc mi nauczyć się podstaw Pythona i Pygame, zanim przejdę do bardziej złożonych rzeczy. Mogę też z niego korzystać, gdy chcę słuchać nijan cat lub innych zapętlonych piosenek bez konieczności wchodzenia na youtube i marnowania cennej przepustowości. Nie martw się o to.

Aha, i tutaj jest kod włożyłem do mojego pętli, chociaż nie sądzę, to liczy się zbytnio:

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

Odpowiedz

8

podsumowanie Miejmy co pygame.time.set_timer robi:

pygame.time .set_timer (eventid, milliseconds): return Brak

Ustaw typ zdarzenia, który będzie pojawiał się w kolejce zdarzeń z każdą podaną liczbą milisekund. Pierwsze wydarzenie pojawi się dopiero po upływie czasu.
Do każdego typu zdarzenia można dołączyć osobny licznik czasu. Najlepiej jest użyć wartości pomiędzy pygame.USEREVENT i pygame.NUMEVENTS.

pygame.USEREVENT i pygame.NUMEVENTS są stałymi (24 i 32), więc argument eventid przechodzą do pygame.time.set_timer powinny być dowolną liczbą całkowitą pomiędzy 24 i 32.

pygame.USEREVENT+1 to 25, więc można go używać.

Po wywołaniu pygame.time.set_timer(USEREVENT+1,7000), zdarzenie z identyfikatorem zdarzenia 25 pojawi się w kolejce zdarzeń co 7000ms. Nie pokazałeś kodu obsługi zdarzeń, ale domyślam się, że nie sprawdzasz tego wydarzenia, co powinieneś zrobić.

Jak widać, pygame.time.set_timer powraca None, więc linia

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

nie ma sensu, ponieważ nyansecond zawsze będzie None i stąd porównując ją przed liczbą całkowitą

if nyansecond < 200 ... 

jest bezcelowy.


Jeśli chcesz odtwarzać dźwięk co 6,5 sekundy przy użyciu kolejki zdarzeń, Simpy połączenia pygame.time.set_timer jeden raz (!):

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

i sprawdź kolejkę zdarzeń dla tego zdarzenia w pętli głównej:

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

Dzięki! To działało całkowicie. Źle zrozumiałem timer: D. Przepraszam, nie używam wydarzeń D :. Niestety, zyskałem nowy problem. Moja pętla czasami, ponieważ jestem na dość powolnym komputerze, nie uruchamia 'pygame.event.get (PLAYSOUNDEVENT)' w tym samym czasie, w którym skończy się czas i powoduje wystąpienie zdarzenia. Czy istnieje sposób, aby to naprawić, czy jest to nierozwiązywalny problem? – Bluetiger6001

+0

Dobra, zrobiłem to moja odpowiedź, chciałbym ją przegłosować, ale właśnie dołączyłem do witryny i nie mam wystarczającej reputacji. Kiedy zdobędę dość, będę wyzywająco głosować na twoją odpowiedź. Dzięki :) – Bluetiger6001

+0

Awansował :) Dzięki za wspaniałą odpowiedź – Bluetiger6001