2013-02-24 76 views
5

Vì vậy, tôi có một vấn đề, tôi không hoàn toàn hiểu sự kiện đó là cần thiết để được trao cho một lệnh hẹn giờ anyway, nó không nói bất cứ nơi nào trực tuyến, đến nơi tôi tìm kiếm giờ. Vì vậy, tôi chỉ sử dụng những gì hầu hết mọi người dường như đang sử dụng 'USEREVENT + 1'. Tôi không chắc nếu nó là chính xác, nhưng bộ đếm thời gian của tôi không hoạt động. Tôi có sử dụng nó đúng không? Đây là mã của tôi:pygame.time.set_timer nhầm lẫn?

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 

Tôi sau đó xóa mã của tôi trên trang thứ hai mà tôi đã triển khai (hoạt động tốt). Nó chạy nyansound, nhưng không chạy nyansoundm sau 6,5 giây (6500 mili giây). Tôi đang làm chương trình này để giúp tôi tìm hiểu những điều cơ bản của python và pygame, trước khi chuyển sang những thứ phức tạp hơn. Tôi cũng có thể sử dụng nó khi tôi muốn nghe nyan mèo hoặc các bài hát looped khác mà không cần phải đi trên youtube và lãng phí băng thông quý giá. Đừng lo lắng về điều đó, mặc dù.

Oh, và đây là đoạn code tôi đã đưa vào vòng lặp của tôi, mặc dù tôi không nghĩ rằng vấn đề này quá nhiều:

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

Trả lời

8

Hãy tóm tắt những gì pygame.time.set_timer làm:

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

Đặt loại sự kiện xuất hiện trên hàng đợi sự kiện mỗi số mili giây. Sự kiện đầu tiên sẽ không xuất hiện cho đến khi hết thời gian.
Mỗi loại sự kiện đều có thể có bộ hẹn giờ riêng biệt gắn với nó. Tốt nhất là sử dụng giá trị giữa pygame.USEREVENT và pygame.NUMEVENTS.

pygame.USEREVENTpygame.NUMEVENTS là hằng số (2432), vì vậy lập luận eventid bạn vượt qua để pygame.time.set_timer nên có bất kỳ số nguyên giữa 2432.

pygame.USEREVENT+125, vì vậy nó rất tốt để sử dụng.

Khi bạn gọi pygame.time.set_timer(USEREVENT+1,7000), sự kiện với eventid 25 sẽ xuất hiện trong hàng đợi sự kiện mỗi 7000ms. Bạn đã không hiển thị mã xử lý sự kiện của mình, nhưng tôi đoán bạn không kiểm tra sự kiện này, bạn nên làm gì.

Như bạn có thể thấy, lợi nhuận pygame.time.set_timerNone, vì vậy dòng của bạn

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

không có ý nghĩa kể từ nyansecond sẽ luôn luôn được None, và do đó so sánh nó với một số nguyên

if nyansecond < 200 ... 

là vô nghĩa.


Nếu bạn muốn phát âm thanh mỗi 6,5 giây bằng hàng đợi sự kiện, cuộc gọi nhỡ pygame.time.set_timer một lần (!):

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

và kiểm tra hàng đợi sự kiện cho sự kiện này trong vòng lặp chính của bạn:

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

Cảm ơn! Điều này làm việc hoàn toàn. Tôi hiểu sai bộ đếm thời gian hoàn toàn: D. Xin lỗi, tôi không sử dụng sự kiện D :. Thật không may, tôi đã đạt được một vấn đề mới. Vòng lặp của tôi đôi khi, kể từ khi tôi đang trên một máy tính khá chậm, không chạy 'pygame.event.get (PLAYSOUNDEVENT)' cùng một lúc như bộ đếm thời gian chạy ra ngoài và gây ra sự kiện xảy ra. Có cách nào để sửa lỗi này, hay đây là một vấn đề nan giải? – Bluetiger6001

+0

Được rồi, tôi đưa ra câu trả lời, tôi sẽ upvote nó, nhưng tôi vừa tham gia trang web và không có đủ danh tiếng. Khi tôi nhận được đủ, tôi sẽ thách thức upvote bạn trả lời. Cảm ơn :) – Bluetiger6001

+0

Upvoted :) Cảm ơn câu trả lời tuyệt vời – Bluetiger6001