-2

Я пытаюсь переместить объект, проверив, что мышь сталкивается с объектами rect и проверяет, нажата ли кнопка мыши.Pygame/python mouse button down issue

вот мой код:

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

Это работает, но я должен спам каждую кнопку на моей мыши и в конечном счете Pygame подберут событие мыши, и объект будет двигаться по назначению, но только на долю секунды то он остановится.

Моя цель - просто щелкнуть мышью по кнопке мыши, и если мышь сталкивается с полем, то коробка будет перемещаться, пока кнопка мыши не будет находиться на мыши x и y.

Я надеюсь, что я буду чист.

Спасибо за любую помощь.

мир!

Вот как я получил его на работу:

#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 

спасибо за помощь!

мир!

ответ

2

При первом нажатии вы получите событие MOUSEBUTTONDOWN, но не позднее, когда оно удерживается. Чтобы определить, когда пользователь перестает нажимать, вам нужно проверить событие MOUSEBUTTONUP.

В качестве альтернативы вы можете использовать pygame.mouse.get_pressed(), чтобы просто узнать текущее состояние кнопок мыши. Документация по функциям мыши - here.

+0

Спасибо, ваш ответ мне очень помог, и теперь у меня это работает по назначению. Я отправлю свой код другим, чтобы посмотреть в качестве примера. – user1473612