खोज…


घटना पाश

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()


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow