单击pygame中的渲染文本

时间:2014-12-03 09:26:56

标签: python user-controls 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()
        #Blit Buttons
        myWindow.blit(menu_main, (MENUX, MENUY))
        myWindow.blit(play_game, (MENUX, MENUY + 120))
        myWindow.blit(instructions, (MENUX, MENUY + 150))
        print play_game_rect
        if play_game_rect.collidepoint(mouse_position):
            game_state == "Game"

1 个答案:

答案 0 :(得分:0)

我想,仔细看看这里: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect 会回答你的问题!

如果没有,这是解决方案:

get_rect得到的矩形对x和y值总是有(0,0)。然而,当你对表面进行blit时,你会移动它们而不是矩形。因此按钮rect就在那里(尝试点击左上角的某处,看看会发生什么),但不能与按钮图像位于同一位置。

要解决此问题,您还必须转移矩形:

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

为每个按钮执行此操作,它应该可以正常工作。如果您不明白问题所在,请再次询问,这是您经常遇到的一个重要问题。