Pygame中分数变量已更新但显示分数未同步问题
问题原因
你代码里的score_surf只在程序启动时渲染了一次初始值0,之后score变量虽然每秒递增,但没有重新生成新的文字表面,屏幕上一直显示的是最初创建的那个0的表面,所以看不到更新。
解决方法
每次score变化后,必须重新调用test_font.render()生成新的分数表面,替换原来的score_surf。更稳妥的方式是把渲染操作放到游戏主循环里,确保每帧都能根据最新的score更新显示内容。
修改后的完整代码
import pygame from sys import exit pygame.init() ### pozwala wykonywać funkcje pygame-a po tym jak jest wywołana screen = pygame.display.set_mode((800, 400)) ### ustalamy rozdzielczość okna gry pygame.display.set_caption("Balls") ###zmienia tytół okienka gry clock = pygame.time.Clock() ### tworzy "zegar", który pomaga na kontrolować fps-y itd bck = pygame.Surface((800, 400)) bck.fill("White") #pygame.font.Font(rodzaj czcionki, rozmiar czcionki) test_font = pygame.font.Font(None, 60) #text_surface = test_font.render("text", wygładzanie krawędzi textu, "color") score = 0 score_rect = pygame.Rect(0,0,0,0) # 先初始化rect,后续用渲染后的surface获取 sh = 0 while True: ### tutaj będzie wszystko wyświetlane, oraz klatki będą aktualizowane for event in pygame.event.get(): ### sprawdzanie inputu użytkownika if event.type == pygame.QUIT: ### wykrywanie czy użytkownik zamyka okno gry pygame.quit() ###przeciwieństwo inicjalizacji pygame, kończy działanie modułu exit() ### kończy wykonywanie załego programu screen.blit(bck, (0, 0)) # 每次循环都重新渲染分数表面,确保显示最新值 score_surf = test_font.render(str(score), True, "Black") score_rect = score_surf.get_rect(center = (400, 150)) screen.blit(score_surf, score_rect) sh += 1 if sh == 60: sh = 0 score += 1 print(score) clock.tick(60) pygame.display.update() ### generuje klatkę
关键修改点
- 把
score_surf的渲染和score_rect的获取移到了主循环内部,每帧都会根据当前score的值生成新的文字表面 - 初始化时不再提前创建
score_surf,而是在循环里动态生成
这样修改后,屏幕上的分数就会和控制台打印的数值同步更新了。
内容的提问来源于stack exchange,提问作者Igor czerbniak
相关产品推荐
相关产品推荐

