2013-02-24 25 views
5

Yani, bir sorunum var, bir zamanlayıcı komutuna verilmesi gereken olayı tam olarak anlamıyorum, çevrimiçi bir yerde, saatlerce aradığım yeri söylemiyor. Bu yüzden çoğu insanın 'USEREVENT + 1' kullanıyormuş gibi kullandım. Doğru olup olmadığından emin değilim, ama zamanlamam çalışmıyor. Doğru kullanıyor muyum? Bunun def Sonrapygame.time.set_timer karışıklığı mı?

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 

I (çalışıyor) Ben uygulanan ikinci sayfada benim koduna: İşte benim kodudur. Bu nyansound çalışır, ancak 6,5 saniyeden sonra (6500 milisaniye) nyansoundm çalıştırmaz. Bu programı, daha karmaşık şeylere geçmeden önce python ve pygame'in temellerini öğrenmeme yardımcı olmak için yapıyorum. Ben de youtube gitmek ve değerli bant genişliği atmak zorunda kalmadan nyan kedi veya diğer ilmekli şarkıları dinlemek istediğimde de kullanabilirim. Bununla ilgili endişelenme.

Oh, ve burada ben sanmıyorum, ancak bu çok fazla önemli, benim döngü içine koyduk kodudur:

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

cevap

8

ne pygame.time.set_timer edelim özetleyelim:

pygame.time .set_timer (eventid, milisaniye): dönüş Yok

Her bir milisaniye cinsinden olay kuyruğunda görünecek bir olay türü ayarlayın. İlk etkinlik, zaman geçene kadar görüntülenmeyecek.
Her olay türü kendisine bağlı ayrı bir zamanlayıcıya sahip olabilir. Pygame.USEREVENT ve pygame.NUMEVENTS arasındaki değeri kullanmak en iyisidir. Eğer pygame.time.set_timer geçirmek argüman eventid24 ve 32 arasında herhangi bir tamsayı olabilir; böylece

pygame.USEREVENT ve pygame.NUMEVENTS, sabitleri (24 ve 32) vardır.

pygame.USEREVENT+125, dolayısıyla kullanımı iyi.

pygame.time.set_timer(USEREVENT+1,7000) numaralı telefonu aradığınızda, eventid 25 ile olay her 7000 ms'lik olay sırasında görünecektir. Etkinlik işlem kodunuzu göstermediniz, ancak sanırım yapmanız gereken bu etkinliği kontrol etmiyorsunuz.

Gördüğünüz gibi, pygame.time.set_timer döner None, böylece hat

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

nyansecond hep

if nyansecond < 200 ... 

olan bir tamsayı karşı karşılaştırarak None ve dolayısıyla olacağından mantıklı değil anlamsız.


her 6,5 saniyede bir olay kuyruğu kullanarak bir ses, Simpy çağrıyı pygame.time.set_timer kez (oynamak istiyorsanız !):

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

ve ana döngü içinde bu olay için olay kuyruğunu kontrol:

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

Teşekkür! Bu tamamen çalıştı. Zamanlayıcıyı tamamen yanlış anladım: D. Üzgünüz, D: olaylarını kullanmıyorum. Maalesef yeni bir problem kazandım. Döngüüm bazen yavaş bir PC'den beri, 'pygame.event.get (PLAYSOUNDEVENT)' komutunu çalıştırmaz, zamanlayıcı tükendiğinde ve olayın gerçekleşmesine neden olur. Bunu düzeltmenin bir yolu var mı, yoksa bu çözülemez bir problem mi? – Bluetiger6001

+0

Tamam, cevabımı yaptım, onu kabul ederim, ancak siteye yeni katıldım ve yeterli bir itibara sahip değilim. Yeterince aldığımda, meydan okurcasına cevaben cevap vereceğim. Thanks :) – Bluetiger6001

+0

Upvoted :) Harika cevaplar için teşekkürler – Bluetiger6001