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