2013-02-24 18 views
5

तो, मुझे कोई समस्या है, मैं किसी भी समय टाइमर कमांड को दी जाने वाली घटना को पूरी तरह से समझ नहीं पा रहा हूं, यह कहीं भी ऑनलाइन नहीं कहता है, जहां मैंने घंटों की खोज की थी। तो मैंने बस 'USEREVENT + 1' का उपयोग करने वाले अधिकांश लोगों का उपयोग किया था। मुझे यकीन नहीं है कि यह सही है, लेकिन मेरा टाइमर काम नहीं कर रहा है। क्या मैं इसे सही तरीके से उपयोग कर रहा हूं? यहां मेरा कोड है: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 

मैं इसे लागू किए गए दूसरे पृष्ठ पर मेरे कोड में इसे परिभाषित करता हूं (जो ठीक काम करता है)। यह नैनसाउंड चलाता है, लेकिन 6.5 सेकंड (6500 मिलीसेकंड) के बाद नैनसाउंडम नहीं चलाता है। मैं इस कार्यक्रम को अधिक जटिल सामग्री पर जाने से पहले, पाइथन और पायगमे की मूल बातें सीखने में मदद करने के लिए कर रहा हूं। मैं इसका उपयोग भी कर सकता हूं जब मैं न्यान बिल्ली या अन्य लूप गीतों को यूट्यूब पर जाने और बहुमूल्य बैंडविड्थ बर्बाद किए बिना सुनना चाहता हूं। हालांकि, इसके बारे में चिंता मत करो।

ओह, और यहाँ, कोड मैं अपने पाश में डाल दिया गया है, हालांकि मुझे नहीं लगता कि यह बहुत ज्यादा मायने रखती है:

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

उत्तर

8

आइए संक्षिप्त क्या pygame.time.set_timer करता है:

pygame.time .set_timer (eventid, मिलीसेकंड): वापसी कोई नहीं

ईवेंट कतार पर प्रत्येक घटना प्रकार को मिलीसेकंड की संख्या के अनुसार एक ईवेंट प्रकार सेट करें। पहली घटना तब तक नहीं दिखाई देगी जब तक कि समय बीत चुका न हो।
प्रत्येक घटना प्रकार से जुड़ा एक अलग टाइमर हो सकता है। Pygame.USEREVENT और pygame.NUMEVENTS के बीच मान का उपयोग करना सबसे अच्छा है।

pygame.USEREVENT और pygame.NUMEVENTS, स्थिरांक (24 और 32) कर रहे हैं तो तर्क eventid आप pygame.time.set_timer को पारित 24 और 32 के बीच कोई पूर्णांक होना चाहिए।

pygame.USEREVENT+125 है, इसलिए इसका उपयोग करना ठीक है।

जब आप pygame.time.set_timer(USEREVENT+1,7000) पर कॉल करते हैं, तो ईवेंट 25 ईवेंट इवेंट कतार में प्रत्येक 7000ms में दिखाई देगा। आपने अपना इवेंट हैंडलिंग कोड नहीं दिखाया, लेकिन मुझे लगता है कि आप इस घटना की जांच नहीं करते हैं, जो आपको करना चाहिए।

आप देख सकते हैं, pygame.time.set_timer रिटर्न None, तो अपनी लाइन

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

मतलब नहीं है के बाद से nyansecond हमेशा None, और इसलिए एक पूर्णांक

if nyansecond < 200 ... 

है के खिलाफ उसकी तुलना हो जाएगा व्यर्थ।


आप एक ध्वनि हर 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

धन्यवाद! यह पूरी तरह से काम किया। मैंने टाइमर को पूरी तरह गलत समझा: डी। क्षमा करें, मैं घटनाओं का उपयोग नहीं करता डी:। दुर्भाग्य से, मुझे एक नई समस्या मिली है। कभी-कभी मेरा लूप, चूंकि मैं काफी धीमी पीसी पर हूं, उसी समय 'pygame.event.get (PLAYSOUNDEVENT)' नहीं चलाता है जैसे टाइमर समाप्त हो जाता है और घटना होने का कारण बनता है। क्या इसे ठीक करने का कोई तरीका है, या यह एक असफल समस्या है? – Bluetiger6001

+0

ठीक है, मैंने इसे अपना जवाब दिया है, मैं इसे ऊपर उठाऊंगा, लेकिन मैं अभी साइट पर शामिल हो गया हूं और पर्याप्त प्रतिष्ठा नहीं है। जब मैं पर्याप्त हो जाता हूं, तो मैं आपको जवाब देने के लिए बदनाम कर दूंगा। धन्यवाद :) – Bluetiger6001

+0

उपरोक्त :) महान उत्तर के लिए धन्यवाद – Bluetiger6001