简体   繁体   English

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

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

I want to make a game similar to DopeWars in pygame, which just uses basic interface to make a fairly entertaining game.我想在pygame中制作一个类似于DopeWars的游戏,它只是使用基本界面来制作一个相当有趣的游戏。 I want to make a menu box appear when I click a button.我想在单击按钮时显示一个菜单框。 With my current code it appears while my mouse is clicked but dissapears once I release mouse button.使用我当前的代码,它会在我的鼠标被点击时出现,但一旦我释放鼠标按钮就会消失。 Is there any way to make the menu (currently just a rect) stay open until I click a back button (not implemented yet).有什么方法可以让菜单(目前只是一个矩形)保持打开状态,直到我单击后退按钮(尚未实现)。

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()

Basically, you simply need a way to make it so that the menu stays.基本上,您只需要一种方法来使菜单保持不变。 One way that I would do it is simply store the state (menu off or on) in a boolean variable.我会这样做的一种方法是简单地将状态(菜单关闭或打开)存储在一个布尔变量中。 For example:例如:

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

You'll need to add some more to this (such as where the mouse location has to be and more), but the general idea is to store the state of if the menu is opened or not in a variable.您需要为此添加更多内容(例如鼠标位置必须在哪里等等),但一般的想法是将菜单是否打开的状态存储在变量中。 Usually if it is an on-off kind of menu, booleans are used, but integers can be used if you have multiple items.通常,如果它是一种开关类型的菜单,则使用布尔值,但如果您有多个项目,则可以使用整数。 Tell me if this solution works for you.告诉我这个解决方案是否适合你。

I recommend you use pygame-menu (pip install pygame-menu)我推荐你使用pygame-menu (pip install pygame-menu)

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

It also provides some basic examples.它还提供了一些基本示例。 Please refer to this link: https://github.com/ppizarror/pygame-menu/tree/master/pygame_menu/examples请参考此链接: https : //github.com/ppizarror/pygame-menu/tree/master/pygame_menu/examples

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

演示

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

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