Нажав на рендеринг текста в pygame

Поэтому я пытаюсь получить "кнопки" для своего главного меню. Это не весь код, но его часть, на мой взгляд, может быть актуальной. Я тестировал, печатая утверждения/значения, что, когда я нажимаю кнопку вниз, он регистрирует мышь, и я знаю прямую текст (в этом случае play_game_rect), поэтому, следуя другому потоку, я решил назначить мышь.get_pos() к переменной mouse_position. Затем я попробовал collidepoint() и передал переменную mouse_position. Я чувствую, что collidepoint() может быть правильным методом для этого. Я также подтвердил, что mouse_position действительно содержит желаемое значение x, y. Я думаю, что это, вероятно, только строка или две, чтобы исправить, но я застрял.

for event in pygame.event.get():
 if event.type == QUIT:
 pygame.quit()
 sys.exit()
 if event.type == MOUSEBUTTONDOWN:
 mouse_position = pygame.mouse.get_pos()

 if game_state == "Menu":
 #Create Button Text
 menu_main = headlines.render("Main Menu", True, WHITE)
 play_game = standard.render("Play Game", True, WHITE)
 instructions = standard.render("Instructions", True, WHITE)
 # Get Button Dimensions
 menu_main_rect = menu_main.get_rect()
 play_game_rect = play_game.get_rect()
 instructions_rect = instructions.get_rect()
 #**** Buttons
 myWindow.****(menu_main, (MENUX, MENUY))
 myWindow.****(play_game, (MENUX, MENUY + 120))
 myWindow.****(instructions, (MENUX, MENUY + 150))
 print play_game_rect
 if play_game_rect.collidepoint(mouse_position):
 game_state == "Game"
1 ответ

Я думаю, более внимательно посмотреть на это здесь: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect ответит на ваш вопрос!

Если нет, то здесь решение:

Прямо с get_rect всегда имеет (0, 0) значение x и y. Однако, когда вы **** поверхности, вы перемещаете их, но не rect. Поэтому кнопка rect (попробуйте щелкнуть где-нибудь в верхнем левом углу и посмотреть, что произойдет), но не в том же положении, что и изображение кнопки.

Чтобы решить эту проблему, вы также должны сдвинуть прямоугольник:

play_game_rect = play_game.get_rect()
play_game_rect.x = MENUX
play_game_rect.y = MENUY

Сделайте это для каждой из кнопок, и он должен работать. Если вы не понимаете, в чем проблема, пожалуйста, спросите еще раз, это важная проблема, с которой вы столкнетесь очень часто.

licensed under cc by-sa 3.0 with attribution.