2008-12-19 7 views
5

अपने स्प्राइट्स को PyGame में माउस क्लिक पर प्रतिक्रिया देने का कैननिक तरीका क्या है?मैं PyGame में sprites पर माउस क्लिक का जवाब कैसे दूं?

यहाँ कुछ आसान है, मेरी घटना पाश में:

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     exit_game() 
    [...] 
    elif ( event.type == pygame.MOUSEBUTTONDOWN and 
      pygame.mouse.get_pressed()[0]): 
     for sprite in sprites: 
      sprite.mouse_click(pygame.mouse.get_pos()) 

इसके बारे में कुछ सवाल:

  1. इस माउस क्लिक का जवाब देने के लिए सबसे अच्छा तरीका है?
  2. क्या होगा यदि माउस कुछ समय के लिए स्प्राइट पर दबाया जाता है? मैं इसे एक एकल घटना कैसे बना सकता हूं?
  3. क्या यह क्लिक के मेरे सभी sprites को सूचित करने का एक उचित तरीका है?

अग्रिम धन्यवाद

उत्तर

10

में मैं आमतौर पर मेरी क्लिक करने योग्य देना वस्तुओं एक क्लिक समारोह, अपने उदाहरण की तरह। जब मैं क्लिक फ़ंक्शंस कहलाता हूं तो मैंने उन सभी ऑब्जेक्ट्स को एक सूची में रखा है, आसान पुनरावृत्ति के लिए।

जब आप किस माउसबटन को दबाते हैं, तो ईवेंट की बटन प्रॉपर्टी का उपयोग करें।

import pygame 
from pygame.locals import * #This lets you use pygame's constants directly. 

for event in pygame.event.get(): 
    if event.type == MOUSEBUTTONDOWN: #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code. 
     if event.button == 1: 
      for object in clickableObjectsList: 
       object.clickCheck(event.pos) 

मैं कहूंगा कि यह करने का यह अनुशंसित तरीका है। क्लिक केवल एक बार पंजीकृत होता है, इसलिए यदि उपयोगकर्ता एक बटन के साथ "खींच रहा है" तो यह आपके स्प्राइट को नहीं बताएगा। यह आसानी से एक बुलियन के साथ किया जा सकता है जो माउसबूटन घटना के साथ सच में सेट किया गया है, और माउसबूटनअप के साथ झूठा है। "ड्रैगगेबल" ऑब्जेक्ट्स को अपने कार्यों को सक्रिय करने के लिए पुनरावृत्त किया गया है ... और इसी तरह।

pygame.mouse.get_pos() 
pygame.mouse.get_pressed(). 

यह बड़ी परियोजनाओं के लिए एक बुरा विचार है, क्योंकि यह कठिन बना सकते हैं:

हालांकि, अगर आप एक ईवेंट हैंडलर का उपयोग नहीं करना चाहते, तो आप एक अद्यतन समारोह की जांच के साथ निवेश के लिए कर सकते हैं बग खोजने के लिए। घटनाओं को एक ही स्थान पर बेहतर रखना। सरल आर्केड गेम जैसे छोटे खेल हालांकि प्रोबिंग शैली का उपयोग करके अधिक समझ सकते हैं।

+0

धन्यवाद। 'Event.button == 1' भाग के बारे में, क्या PyGame में उस स्पष्ट 1 के बजाय कोई स्थिर नहीं है? –

+0

मुझे नहीं लगता कि इसकी आवश्यकता है। 1 हमेशा बाएं बटन होता है, 2 मध्य होता है, और 3 सही होता है। 3 केवल दो बटन वाले मकानों पर भी सही है। – Zoomulator