Изображение backgroundGameType
не остается на экране, потому что код отображает его на экране, только когда мышь удерживается в пределах области, определенной для кнопки.
Если вы хотите, чтобы это было сказано на экране, одним из способов было бы установить флаг, который проверяется на каждой итерации в основном цикле обработки событий (while intro:
), который отслеживает, отображать или нет его также, когда мышь больше не в этом регионе.
Ниже ваш код изменен для этого. Заметьте, я закомментировал некоторые его части, которые не имеют ничего общего с проблемой - то, что вы должны были сделать до публикации своего кода (или, что еще лучше, полностью удалить). См. Как создать минимальный, полный и проверяемый пример .
Была добавлена новая переменная глобального флага с именем game_mode_selected
и инициализирована в False
, и ее значение проверяется на каждой итерации основного цикла. Пока он не имеет «истинного» значения, выполняется вызов для отображения кнопки "SinglePlayer"
и проверки состояния мыши. Если щелкнуть мышью в пределах определенной для нее области и вызвать связанную функцию action
, game_type()
, значение этого глобального флага изменится на «запомнить», что это произошло.
Поскольку я предполагаю, что в этот момент вам больше не нужно отображать кнопку "SinglePlayer"
, я также добавил вызов gameDisplay.fill(black)
в начало основного цикла. Без этого кнопка будет продолжать оставаться видимой, даже если она больше ничего не делает.
import time
import pygame
from tkinter import *
#import pyautogui
#pygame.mixer.pre_init(44100,16,2,4096)
pygame.init()
display_width = 1200
display_height = 600
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
hgrey = (77,197,179)
hlight_grey = (255,102,106)
grey = (68,187,169)
light_grey = (247,94,98)
#pygame.mixer.music.load('music/privia_the_begining.mp3')
#pygame.mixer.music.play(-1)
counter = 0
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Privia 1.0')
clock = pygame.time.Clock()
#gameIcon = pygame.image.load('pics/priviaicon.png')
#bannerIcon = pygame.image.load('pics/priviabanner.png')
backgroundMenu = pygame.image.load('pics/bgm.png')
backgroundGameType = pygame.image.load('pics/bgmws.png')
#pygame.display.set_icon(gameIcon)
def text_objects(text, font):
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()
def messeage_display(text):
largeText = pygame.font.Font('freesansbold.ttf',115)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
def button(msg, x, y, w, h, ic, ac, action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if (x+w > mouse[0] > x) and (y + h > mouse[1] > y):
pygame.draw.rect(gameDisplay, ac, (x,y,w,h))
if click[0] == 1 and action != None:
action()
else:
pygame.draw.rect(gameDisplay, ic, (x,y,w,h))
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)
def quitgame():
pygame.quit()
quit()
# pygame.mixer.stop()
game_mode_selected = False # New global variable
def main_menu():
global game_mode_selected
game_mode_selected = False
intro = True
while intro:
gameDisplay.fill(black) # Added.
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.blit(backgroundMenu, [0, 0])
# gameDisplay.blit(bannerIcon,(300,4))
if not game_mode_selected:
button("SinglePlayer", 430,260, 350,100, grey, hgrey, game_type)
else:
gameDisplay.blit(backgroundGameType, [0, 0])
button("Quit", 507,400, 200,50, light_grey, hlight_grey, quitgame)
pygame.display.update()
clock.tick(15)
def game_type():
global game_mode_selected
game_mode_selected = True # Change global because button was clicked.
gameDisplay.blit(backgroundGameType, [0, 0])
print("working")
main_menu()