[英]How do I stop pygame pictures overlapping
#in the game loop
if event.key == pygame.K_p:
paused = True
pause_menu(paused, sound_state)
if updated_sound_state:
sound_state = True
mixer.music.unpause()
elif not updated_sound_state:
sound_state = False
mixer.music.pause()
#the pause menu
def pause_menu(paused, sound_state):
global updated_sound_state
updated_sound_state = sound_state
mixer.music.pause()
if updated_sound_state:
screen.blit(sound_on_image, (5, (display_height - sound_image_y_size)))
if not updated_sound_state:
screen.blit(sound_off_image, (5, (display_height - sound_image_y_size)))
while paused:
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_p:
paused = False
if event.key == pygame.K_s:
if sound_state:
updated_sound_state = False
paused = False
pause_menu(paused=True, sound_state=updated_sound_state)
elif not sound_state:
updated_sound_state = True
paused = False
pause_menu(paused=True, sound_state=updated_sound_state)
return sound_state
当我打开暂停菜单时,它会显示正确的图像,但是当我打开或关闭声音时,它会显示两个图像。
当我退出暂停并 go 重新暂停时,它确实显示了正确的图像。
我该如何解决?
不要递归调用pause_menu
。 您必须在每一帧中清除绘制场景。 获取 ` 之前的屏幕copy
current_screen = screen.copy()
在暂停循环中对副本进行blit
并在其上绘制菜单:
screen.blit(current_screen, (0, 0))
if updated_sound_state:
screen.blit(sound_on_image, (5, (display_height - sound_image_y_size)))
if not updated_sound_state:
screen.blit(sound_off_image, (5, (display_height - sound_image_y_size)))
pygame.display.update()
完成pause_menu
function:
def pause_menu(paused, sound_state):
global updated_sound_state
updated_sound_state = sound_state
mixer.music.pause()
current_screen = screen.copy()
while paused:
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_p:
paused = False
if event.key == pygame.K_s:
if sound_state:
updated_sound_state = False
paused = False
elif not sound_state:
updated_sound_state = True
paused = False
screen.blit(current_screen, (0, 0))
if updated_sound_state:
screen.blit(sound_on_image, (5, (display_height - sound_image_y_size)))
if not updated_sound_state:
screen.blit(sound_off_image, (5, (display_height - sound_image_y_size)))
pygame.display.update()
return sound_state
典型的 PyGame 应用循环必须:
pygame.event.pump()
或pygame.event.get()
处理事件。blit
所有对象)pygame.display.update()
或pygame.display.flip()
更新显示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.