-2

J'essaie de déplacer un objet en vérifiant si la souris entre en collision avec les objets rect et en vérifiant si un bouton de la souris est enfoncé.Pygame/python mouse button down

voici mon code:

class Unit(pygame.sprite.Sprite): 
    def __init__(self, display,): 
    pygame.sprite.Sprite.__init__(self,) 

    self.master_image = pygame.Surface((50, 100)) 
    self.master_image.fill((000,255,000)) 
    self.image = self.master_image 
    self.rect = self.image.get_rect() 
    self.rect.centerx = 500 
    self.rect.centery = 500 

def move(self): 
    mouse = pygame.Surface((5, 5)) 
    mouse_rect = mouse.get_rect() 
    (mouseX, mouseY) = pygame.mouse.get_pos() 
    mouse_rect.centerx = mouseX 
    mouse_rect.centery = mouseY 

    for event in pygame.event.get(): 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      if mouse_rect.colliderect(self.rect): 
       self.rect.centerx = mouseX 
       self.rect.centery = mouseY 
       print "move" 

def update(self,): 
    self.move() 

Cela fonctionne, mais je dois le spam chaque bouton sur ma souris et éventuellement Pygame ramasser l'événement de la souris et l'objet se déplacera comme prévu, mais seulement pour une fraction de seconde alors ça va s'arrêter.

Mon but est simplement de cliquer sur un bouton de la souris et si la souris entre en collision avec la boîte alors la boîte se déplacera alors que le bouton de la souris est enfoncé sur la souris x et y.

J'espère que je suis clair.

Merci pour toute aide

peace!

Voici comment je l'ai eu à travailler:

#unit sprite class 
class Unit(pygame.sprite.Sprite): 
    def __init__(self, display,): 
     pygame.sprite.Sprite.__init__(self,) 

     self.master_image = pygame.Surface((50, 100)) 
     self.master_image.fill((000,255,000)) 
     self.image = self.master_image 
     self.rect = self.image.get_rect() 
     self.rect.centerx = 500 
     self.rect.centery = 500 

     #mouse stuff 
     self.mouse = pygame.Surface((5, 5)) 
     self.mouse_rect = self.mouse.get_rect() 
     (self.mouse_rect.centerx , self.mouse_rect.centery) = pygame.mouse.get_pos() 


    def move(self): 
     if pygame.MOUSEBUTTONDOWN:#check for mouse button down 
      (button1, button2, button3,) = pygame.mouse.get_pressed()#get button pressed 

      if button1 and self.mouse_rect.colliderect(self.rect):#check for collision between object and mouse 
       (self.rect.centerx, self.rect.centery) = pygame.mouse.get_pos()#set object POS to mouse POS 

    def update(self,): 
     (self.mouse_rect.centerx , self.mouse_rect.centery) = pygame.mouse.get_pos()#update mouse RECT 
     self.move()#check movement 

merci pour l'aide!

paix!

Répondre

2

Vous obtiendrez un événement MOUSEBUTTONDOWN lors de la première pression, mais pas par la suite lorsqu'il est maintenu enfoncé. Pour déterminer quand l'utilisateur cesse d'appuyer dessus, vous devez vérifier l'événement MOUSEBUTTONUP.

Vous pouvez également utiliser pygame.mouse.get_pressed() pour vous renseigner sur l'état actuel des boutons de la souris. La documentation de la fonction de la souris est here.

+0

Merci, votre réponse m'a beaucoup aidé et je l'ai maintenant comme prévu. Je vais poster mon code pour les autres à voir comme un exemple. – user1473612