使用mouse.get_pressed()创建pygame菜单

时间:2018-03-25 23:56:47

标签: python pygame

我想在pygame中制作类似于DopeWars的游戏,它只使用基本界面制作一款相当有趣的游戏。我想点击按钮时出现一个菜单框。使用我当前的代码,单击鼠标时会出现,但是一旦我释放鼠标按钮就会消失。有没有办法让菜单(目前只是一个矩形)保持打开状态,直到我点击后退按钮(尚未实现)。

import pygame

pygame.init()

display_width = 400
display_height = 600

black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
background = (72,76,81)
button_inactive = (99,105,114)
button_active = (84,89,96)

game_display = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Ay lmao')


clock = pygame.time.Clock()

def button(msg,button_x,button_y,button_w,button_h,button_a,button_in,action = None):

    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    if button_x + button_w > mouse[0] > button_x and button_y + button_h > mouse[1] > button_y:
        pygame.draw.rect(game_display,button_a,(button_x,button_y,button_w,button_h))
        if click[0] == 1 and action != None:            
            action()             
    else:
        pygame.draw.rect(game_display,button_in,(button_x,button_y,button_w,button_h))

    small_text = pygame.font.Font("freesansbold.ttf",20)
    text_surf, text_rect = text_objects(msg, small_text)
    text_rect.center = ((button_x+(button_w/2)), (button_y + 50/2))
    game_display.blit(text_surf,text_rect)


def move():
    pygame.draw.rect(game_display,button_inactive,[100,100,200,300])


def text_objects(text,font):
    text_surface = font.render(text,True,black)
    return text_surface, text_surface.get_rect()

def game_loop():
    gameExit = False
    while not gameExit:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        game_display.fill(background)

        mouse = pygame.mouse.get_pos()

        button("Move",15,490,370,50,button_active,button_inactive,move)
        button("Action",15,545,370,50,button_active,button_inactive)


        pygame.display.update()

        clock.tick(90)

    game_loop()

2 个答案:

答案 0 :(得分:4)

基本上,你只需要一种方法来使菜单保持不变。我要做的一种方法是简单地将状态(菜单关闭或打开)存储在布尔变量中。例如:

menu_opened = False #The variable that sees if the menu should be open.
while True
    click = pygame.mouse.get_pressed()
        if click[0]: #No need to add == 1
            menu_opened = True
    if menu_opened:
        menu.draw() #Draw menu

您需要为此添加更多内容(例如鼠标位置必须更多),但一般的想法是存储菜单是否在变量中打开的状态。通常,如果它是开关类型的菜单,则使用布尔值,但如果您有多个项目,则可以使用整数。 告诉我这个解决方案是否适合你。

答案 1 :(得分:0)

我建议您使用pygame-menu(通过pip install pygame-menu)

演示图片:https://github.com/ppizarror/pygame-menu/tree/master/docs/_static

它还提供了一些基本示例。请参考以下链接:https://github.com/ppizarror/pygame-menu/tree/master/pygame_menu/examples

文档:https://pygame-menu.readthedocs.io/en/latest/

demo