Функция «кнопка» Pygame не обнаруживает события мыши - PullRequest
0 голосов
/ 07 ноября 2018

Я скопировал эту функцию из одного из моих старых проектов, в котором она отлично работает, но больше не работает. Предполагается, что кнопка определяет, когда курсор находится над ней, и перерисовывает себя более светлым цветом, а затем, когда курсор исчезает, она перерисовывает себя обычным более темным цветом. Но теперь, когда курсор находится над ним, он не меняется. Он также не реагирует на нажатия. Вот код

def button(text, x, y, width, height, inactive_color, active_color, action = None):
    cur = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    if x + width > cur[0] > x and y + height > cur[1] > y:
        pygame.draw.rect(gameDisplay, active_color, (x, y, width, height))
        pygame.display.update()
        if click[0] == 1 and action != None:
            if action == 'correct':
                print('correct!')
    else:
        pygame.draw.rect(gameDisplay, inactive_color, (x, y, width, height))

    text_to_button(text, black, x, y, width, height)
    pygame.display.update()

button('test', 100, 100, 100, 50, darkGreen, green, action = 'correct')

1 Ответ

0 голосов
/ 07 ноября 2018

Вы вызываете функцию button один раз. Он проходит через код функции и завершается, и больше не реагирует на любые входные данные - потому что он запускался только один раз (почти мгновенно).

Возможно, если вы вызываете этот метод каждый раз, когда происходит событие перемещения мыши в очереди evnet Pygame, это может сработать.

В качестве альтернативы рассмотрите возможность использования объекта вместо функции, например:

class Button():
    def __init__(self, x, y, width, height, text, action):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.text = text
        self.action = action
        self.label = myfont.render(self.text, 1, (0,0,0))


    def render(self, window):
        if self.visible == True:
            pygame.draw.rect(window, (255,255,255), [self.x, self.y, self.width, self.height])
            window.blit(self.label, (self.x, self.y))

    def pressed(self):
            self.action(self.arguments)

    def hover(self):
            #Here you can implement your code that handles when the mouse hovers over the button. This method can be called by checking mouse movement events in your main loop and seeing if they lie within the coordinates, width, and height of the button. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...