So my pause display keeps returning after I click on the button which continues everything.
This is included in the code: "def paused(): global pause clock = pygame.time.Clock()"
while pause:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
screen.fill(0)
screen.blit(intropic, (0, 0))
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
# print(mouse)
if 270 + 120 > mouse[0] > 270 and 590 + 50 > mouse[1] > 590:
pygame.draw.rect(screen, (0, 0, 0), (268, 588, 124, 54))
pygame.draw.rect(screen, (0, 255, 0), (270, 590, 120, 50))
if click[0] == 1:
pause = False
else:
pygame.draw.rect(screen, (0, 0, 0), (268, 588, 124, 54))
pygame.draw.rect(screen, (100, 255, 100), (270, 590, 120, 50))
if 770 + 150 > mouse[0] > 770 and 590 + 50 > mouse[1] > 590:
pygame.draw.rect(screen, (0, 0, 0), (768, 588, 154, 54))
pygame.draw.rect(screen, (255, 0, 0), (770, 590, 150, 50))
if click[0] == 1:
pygame.quit()
exit()
else:
pygame.draw.rect(screen, (0, 0, 0), (768, 588, 154, 54))
pygame.draw.rect(screen, (255, 100, 100), (770, 590, 150, 50))
healthfont = pygame.font.Font(None, 40)
start = healthfont.render("Weiter", True, (0, 0, 0))
textRect1 = start.get_rect()
textRect1.topright = [370, 603]
screen.blit(start, textRect1)
healthfont = pygame.font.Font(None, 40)
end = healthfont.render("Beenden", True, (0, 0, 0))
textRect1 = end.get_rect()
textRect1.topright = [900, 603]
screen.blit(end, textRect1)
pausefont = pygame.font.Font(None, 80)
pausetxt = pausefont.render("Pause", True, (0, 0, 0))
textRect1 = pausetxt.get_rect()
textRect1.center = [800, 300]
screen.blit(pausetxt, textRect1)
pygame.display.flip()
This is the code if you press P:
if keys[4]:
pause = True
paused()
There is also a global pause = False
any help is much appreciated
Being paused or not paused, it's just a boolean. Your program must decide what that means.
Perhaps it means that the screen is not updated, and perhaps input-handling is different.
Below is a re-working of your code where if the paused flag global_paused
ever gets set, the screen stops painting everything except a "*** PAUSED ***" banner.
Note the use of pyagme.Rect
to store rectangles, constants for colours, an simpler testing of collisions. Fonts only need to be loaded once, so these have been moved outside the main loop.
global_paused = False
BLACK = (0, 0, 0)
RED = (0, 255, 0)
GREENISH = (100, 255, 100)
area1 = pygame.Rect( 268, 588, 124, 54 )
area2 = pygame.Rect( 270, 590, 120, 50 )
area3 = pygame.Rect(768, 588, 154, 54)
area4 = pygame.Rect(770, 590, 150, 50)
healthfont = pygame.font.Font(None, 40)
start = healthfont.render("Weiter", True, BLACK )
textRect1 = start.get_rect()
textRect1.topright = [370, 603]
healthfont = pygame.font.Font(None, 40)
end = healthfont.render("Beenden", True, BLACK )
textRect1 = end.get_rect()
textRect1.topright = [900, 603]
pausefont = pygame.font.Font(None, 80)
pausetxt = pausefont.render("Pause", True, BLACK )
textRect1 = pausetxt.get_rect()
textRect1.center = [800, 300]
pause_mode = pausefont.render( "*** PAUSED ***", True, RED, BLACK )
clock = pygame.time.Clock()
exiting = False
while not exiting:
mouse_click = None
mouse_pos = pygame.mouse.get_pos()
# Handle Events
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif ( event.type == pygame.MOUSEBUTTONUP ):
mouse_click = pygame.mouse.get_pressed()
if ( area1.collidepoint( event.pos ) ):
global_paused = not global_paused
elif ( area3.collidepoint( event.pos ) ):
exiting = True
elif ( event.type == pygame.KEYUP ):
if ( event.key == pygame.K_p ):
global_paused = not global_paused
# draw the screen
screen.fill( BLACK )
if ( not global_paused ):
screen.blit(intropic, (0, 0))
pygame.draw.rect(screen, BLACK, area1 )
if ( area1.collidepoint( mouse_pos ) ):
pygame.draw.rect(screen, RED, area2 )
else:
pygame.draw.rect(screen, GREENISH, area2 )
pygame.draw.rect(screen, BLACK, area3 )
pygame.draw.rect(screen, RED, area4 )
else:
pygame.draw.rect(screen, GREENISH, area4 )
screen.blit(start, textRect1)
screen.blit(end, textRect1)
screen.blit(pausetxt, textRect1)
else:
# everything is paused
screen.blit( pause_mode, ( 0, 0 ) )
pygame.display.flip()
clock.tick( 60 )
pygame.quit()