Pygame中Game Over横幅无法显示问题排查求助
问题原因及解决方案
问题出在渲染与屏幕刷新的顺序上:
在你的run_test循环中,执行顺序是:
_update_screen():填充屏幕为红色,然后立即调用pygame.display.flip()刷新显示_test_banner():绘制横幅,但此时没有再次刷新屏幕,所以横幅的绘制内容不会被显示出来- 下一次循环又会先填充屏幕覆盖掉之前的横幅绘制,导致永远看不到横幅
pygame.display.flip()必须在所有绘制操作完成后调用,才能确保所有元素都被渲染到屏幕上。
修正后的测试代码
调整Test类中的方法逻辑,统一绘制与刷新时机:
import sys from banner import Banner import pygame class Test: """A class for testing purposes.""" def __init__(self): """Initializing test class.""" pygame.init() # Create a display window. self.screen_color = (255, 0, 0) self.screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Test") self.game_over = Banner(self, "Game Over") def run_test(self): """Start the test.""" while True: self._check_events() self._update_screen() def _check_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() def _update_screen(self): self.screen.fill(self.screen_color) # 先绘制横幅,再执行屏幕刷新 self.game_over.draw_banner() pygame.display.flip() # Main program if __name__ == '__main__': test = Test() test.run_test()
关键修改点
- 移除单独的
_test_banner方法,将横幅绘制逻辑整合到_update_screen中,确保在填充屏幕后、刷新屏幕前完成绘制 - 保证
pygame.display.flip()只在所有绘制操作完成后调用一次,让所有元素都能被正确渲染到屏幕上
调整后,"Game Over"横幅就能正常显示在屏幕中央了。
内容的提问来源于stack exchange,提问作者Alpindos
相关产品推荐
相关产品推荐

