繁体   English   中英

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

[英]Creating pygame menu using mouse.get_pressed()

我想在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()

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

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

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

我推荐你使用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/

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM