pygame
घटना से निपटना
खोज…
घटना पाश
Pygame उपयोगकर्ता से सभी घटनाओं को एक घटना कतार में पंजीकृत करेगा जो कि कोड pygame.event.get()
साथ प्राप्त किया जा सकता है। इस कतार में प्रत्येक तत्व एक Event
ऑब्जेक्ट है और वे सभी में विशेषता type
, जो एक पूर्णांक है जो यह दर्शाता है कि यह किस प्रकार का ईवेंट है। Pygame मॉड्यूल में पूर्वनिर्धारित पूर्णांक स्थिरांक प्रकार का प्रतिनिधित्व करते हैं। इस विशेषता को छोड़कर, घटनाओं में अलग-अलग विशेषताएं हैं।
लगातार नाम | गुण |
---|---|
QUIT | कोई नहीं |
ACTIVEEVENT | लाभ, राज्य |
चाबी नीचे | यूनिकोड, की, मॉड |
तनाव के स्थिति में | कुंजी, आधुनिक |
MOUSEMOTION | स्थिति, rel, बटन |
MOUSEBUTTONUP | स्थिति, बटन |
MOUSEBUTTONDOWN | स्थिति, बटन |
JOYAXISMOTION | आनंद, धुरी, मूल्य |
JOYBALLMOTION | खुशी, गेंद, rel |
JOYHATMOTION | खुशी, टोपी, मूल्य |
JOYBUTTONUP | आनंद, बटन |
JOYBUTTONDOWN | आनंद, बटन |
VIDEORESIZE | आकार, डब्ल्यू, एच |
VIDEOEXPOSE | कोई नहीं |
USEREVENT | कोड |
उदाहरण
हमारी घटनाओं को संभालने के लिए हम केवल कतार से गुजरते हैं, यह जांचें कि यह किस प्रकार का है (pygame मॉड्यूल में पूर्वनिर्धारित स्थिरांक की मदद से) और फिर कुछ क्रिया करें। यह कोड यह जांच करेगा कि क्या उपयोगकर्ता ने प्रदर्शन के शीर्ष कोने पर बंद बटन दबाया है, और यदि प्रोग्राम समाप्त हो गया है।
for event in pygame.event.get():
if event.type == pygame.QUIT:
# Close the program any way you want, or troll users who want to close your program.
raise SystemExit
ध्यान : आप pygame का उपयोग करते समय घटना कतार नियमित रूप से कॉल करने के लिए है! उपलब्ध घटनाओं को लाने के अलावा, इवेंट कतार को कॉल करना भी आंतरिक रूप से ऑपरेटिंग सिस्टम के साथ बातचीत करने के लिए pygame का तरीका है। यदि ईवेंट कतार को नियमित रूप से नहीं बुलाया जाता है, तो आपका ऑपरेटिंग सिस्टम यह मान लेगा कि आपका प्रोग्राम अब सही ढंग से काम नहीं करता है और संभवतः इसे प्रोग्राम क्रैश होने जैसा दिखता है (विंडोज़ में विंडो सफेद हो जाती है)। यदि आप घटनाओं के साथ कुछ भी नहीं करना चाहते हैं तो आपको pygame.event.pump()
को आंतरिक रूप से घटनाओं को संसाधित करने के लिए प्रत्येक गेम लूप pygame.event.pump()
को कॉल करना चाहिए।
कीबोर्ड की घटनाएँ
Pygame में दो प्रकार की प्रमुख घटनाएं हैं: KEYDOWN
और KEYUP
। इन घटनाओं में एक विशेषता key
होती है जो कि कीबोर्ड पर एक कुंजी का प्रतिनिधित्व करने वाला पूर्णांक होता है। Pygame मॉड्यूल ने सभी सामान्य कुंजियों का प्रतिनिधित्व करने वाले पूर्णांक स्थिरांक को पूर्वनिर्धारित किया है। स्थिरांक एक राजधानी K
, एक अंडरस्कोर और कुंजी के नाम के साथ नामित किए गए हैं। उदाहरण के लिए, <- का नाम K_BACKSPACE
, a का नाम K_a
और F4 का नाम K_F4
।
उदाहरण
यह कोड यह जांच करेगा कि उपयोगकर्ता ने w , a , s या d दबाया है या नहीं।
for event in pygame.event.get():
if event.type == pygame.QUIT: # Usually wise to be able to close your program.
raise SystemExit
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
print("Player moved up!")
elif event.key == pygame.K_a:
print("Player moved left!")
elif event.key == pygame.K_s:
print("Player moved down!")
elif event.key == pygame.K_d:
print("Player moved right!")
संशोधक
बड़े अक्षरों के लिए कोई पूर्णांक स्थिर नहीं है। इसके बजाय, प्रमुख घटनाओं में एक और विशेषता होती है जिसे mod
कहा जाता है, जो कि एक साथ कुंजी के रूप में दबाए जाने वाले संशोधक ( शिफ्ट , ctrl , alt आदि) है। mod
विशेषता एक पूर्णांक है जो संशोधक को दबाए जाने का प्रतिनिधित्व करता है। प्रत्येक संशोधक के पूर्णांक मान को KMOD_
और उनके नाम के तहत pygame मॉड्यूल में संग्रहीत किया जाता है। उदाहरण के लिए, वाम शिफ्ट का नाम KMOD_LSHIFT
, टैब का नाम KMOD_TAB
और Ctrl का नाम KMOD_CTRL
रखा KMOD_CTRL
।
उदाहरण
इस कोड को उपयोगकर्ता मौसम की जाँच करेगा एक, वाम shift + एक या कैप्स + एक दबाया।
for event in pygame.event.get():
if event.type == pygame.QUIT: # It's still wise to be able to close your program.
raise SystemExit
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
if event.mod == 0: # No modifier.
print("You pressed 'a'")
elif event.mod == pygame.KMOD_LSHIFT or event.mod == pygame.KMOD_CAPS:
print("You pressed 'A'")
else:
print("You pressed 'a' with another modifier than right shift or caps.")
माउस घटनाओं
Pygame MOUSEMOTION
, MOUSEBUTTONDOWN
और MOUSEBUTTONUP
में तीन प्रकार के माउस इवेंट MOUSEBUTTONUP
। जब एक प्रदर्शन मोड सेट किया गया है तो Pygame इन घटनाओं को पंजीकृत करेगा।
उपयोगकर्ता द्वारा अपने माउस को डिस्प्ले में ले जाने पर MOUSEMOTION
प्राप्त होता है। इसमें एट्रिब्यूट्स buttons
, pos
और rel
।
-
buttons
एक टपल का प्रतिनिधित्व करते हैं यदि माउस बटन (left
,mouse-wheel
,right
) दबाया जा रहा है या नहीं। -
pos
पिक्सेल में कर्सर की पूर्ण स्थिति (x
,y
) है। -
rel
, पिक्सेल में पिछली स्थिति (rel_x
,rel_y
) के सापेक्ष स्थिति है।
उपयोगकर्ता द्वारा माउस बटन दबाने या MOUSEBUTTONUP
MOUSEBUTTONDOWN
और MOUSEBUTTONUP
प्राप्त होता है। उनके पास विशेषताएँ button
और pos
।
-
button
एक पूर्णांक है जो बटन दबाए जाने का प्रतिनिधित्व करता है। बाएं बटन के लिए1
, माउस-व्हील के लिए 2 और दाएं बटन के लिए3
। -
pos
माउस (के निरपेक्ष स्थिति हैx
,y
) उपयोगकर्ता माउस बटन दबाया जब।
उदाहरण
यहां प्रत्येक माउस ईवेंट की कुछ विशेषताओं का उपयोग करते हुए एक छोटा उदाहरण दिया गया है:
for event in pygame.event.get():
if event.type == pygame.QUIT: # Close your program if the user wants to quit.
raise SystemExit
elif event.type == pygame.MOUSEMOTION:
if event.rel[0] > 0: # 'rel' is a tuple (x, y). 'rel[0]' is the x-value.
print("You're moving the mouse to the right")
elif event.rel[1] > 0: # pygame start y=0 at the top of the display, so higher y-values are further down.
print("You're moving the mouse down")
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
print("You pressed the left mouse button")
elif event.button == 3:
print("You pressed the right mouse button")
elif event.type == pygame.MOUSEBUTTONUP:
print("You released the mouse button")
चूंकि pygame मॉड्यूल में माउस बटन विशेषता के लिए कोई पूर्वनिर्धारित स्थिरांक नहीं हैं, इसलिए यहां प्रत्येक के लिए मान हैं:
बटन | मूल्य |
---|---|
माउस बटन छोड़ें | 1 |
माउस व्हील बटन | 2 |
दायाँ माउस बटन | 3 |
माउस व्हील स्क्रॉल करें | 4 |
माउस व्हील स्क्रॉल नीचे | 5 |
माउस बटन स्क्रॉल करने से pygame.MOUSEBUTTONDOWN
और pygame.MOUSEBUTTONUP
इवेंट जनरेट pygame.MOUSEBUTTONDOWN
।
राज्य की जाँच
कुंजी और माउस की स्थिति प्राप्त करने के लिए pygame.key
और pygame.mouse
मॉड्यूल से फ़ंक्शन को कॉल करना संभव है। हालाँकि, यह pygame में घटनाओं को संसाधित करने का अनुशंसित तरीका नहीं है क्योंकि इसके साथ कुछ खामियां हैं:
जब फ़ंक्शन को कॉल किया जाता है, तो आप राज्यों को प्राप्त करेंगे, जिसका अर्थ है कि आप कॉल के बीच की घटनाओं को याद कर सकते हैं यदि उपयोगकर्ता बटन तेजी से दबा रहा है।
आप घटनाओं के क्रम को निर्धारित नहीं कर सकते,।
आपको अभी भी pygame में से किसी एक को pygame के लिए कार्य करने के लिए ऑपरेटिंग सिस्टम के साथ इंटरैक्ट करने के लिए कॉल करना होगा, अन्यथा यह चेतावनी देगा कि प्रोग्राम अप्रतिसादी हो गया है। आप जिन कार्यों को कॉल कर सकते हैं, वे हैं:
-
pygame.event.get()
सभी घटनाओं या घटना के प्रकार (एक तर्क के रूप में प्रकारों को पास करके) प्राप्त करने के लिए। -
pygame.event.poll()
कतार से एक एकल घटना प्राप्त करने के लिए। -
pygame.event.wait()
कतार से एक एकल घटना की प्रतीक्षा करें। -
pygame.event.clear()
कतार में सभी घटनाओं को साफ़ करने के लिए। -
pygame.event.pump()
आंतरिक कार्यों को संभालने के लिए pygame को अनुमति देने के लिए (इसे ऊपर दिए गए कार्यों द्वारा स्पष्ट रूप से कहा जाता है)।
-
कीबोर्ड की घटनाएँ
कुंजी मॉड्यूल में एक फ़ंक्शन pygame.key.get_pressed()
जो सभी कुंजी की स्थिति की एक सूची देता है। सूची में उन सभी कुंजियों के लिए 0
हैं जिन्हें दबाया नहीं गया है और 1
उन सभी कुंजियों के लिए है जिन्हें दबाया गया है। सूची में इसका सूचकांक pygame मॉड्यूल में स्थिरांक द्वारा परिभाषित किया गया है, सभी K_
और प्रमुख नाम के साथ उपसर्ग करते हैं।
pygame.event.pump() # Allow pygame to handle internal actions.
key = pygame.key.get_pressed()
if key[pygame.K_a]:
print("You pressed 'a'")
if key[pygame.K_F1]:
print("You pressed 'F1'")
if key[pygame.K_LSHIFT]:
print("You pressed 'left shift'")
if key[pygame.K_q]: # Press 'q' to exit the program
quit()
यदि आप कुंजी को दबाए रखने के बजाय किसी एकल कुंजी प्रेस की जांच करना चाहते हैं, तो आप एक अस्थायी चर में सभी कुंजियों की पिछली स्थिति को संग्रहीत कर सकते हैं और मान बदल सकते हैं:
pygame.event.pump() # Allow pygame to handle internal actions.
key = pygame.key.get_pressed()
if key[pygame.K_q] and not previous_key[pygame.K_q]:
print("You pressed 'q'")
if key[pygame.K_p] and not previous_key[pygame.K_p]:
print("You pressed 'p'")
previous_key = key
वर्तमान कुंजी दबाए जाने पर और पिछली कुंजी नीचे दबाए नहीं जाने पर ही कथन सही का मूल्यांकन करता है। उपयोगकर्ता कुंजी जारी की है कि क्या जांच करने के लिए आप केवल स्विच करने के लिए है not
कीवर्ड ( if not key[pygame.K_q] and previous_key[pygame.K_q]
)। इसे ठीक से काम करने के लिए, आपको गेम लूप से पहले previous_key = pygame.key.get_pressed()
सेट करना होगा, अन्यथा आपको NameError
प्राप्त होगा।
माउस घटनाओं
माउस मॉड्यूल में फ़ंक्शन होते हैं जो हमें माउस की स्थिति की जांच करने और सेट करने के साथ-साथ दबाए गए बटनों की भी जांच करते हैं। फ़ंक्शन pygame.mouse.get_pressed()
माउस बटन (बाएं, माउस-व्हील, दाएं) का प्रतिनिधित्व करता है या नहीं, एक टपल टपल देता है।
pygame.event.pump() # Allow pygame to handle internal actions.
mouse_pos = pygame.mouse.get_pos()
mouse_buttons = pygame.mouse.get_pressed()
if mouse_pos[0] > 100:
pygame.mouse.set_pos(10, mouse_pos[1]) # Reset the mouse's x-position to 10.
print("YOU SHALL NOT PASS!")
if mouse_buttons[2]:
print("I'm right, right?")
if mouse_buttons[0]: # Press left mouse button to exit.
print("Program left")
quit()