微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在黑板上新输入的数字显示在 Pygame 中以前的数字之上,我不知道为什么

如何解决我在黑板上新输入的数字显示在 Pygame 中以前的数字之上,我不知道为什么

我正在构建一个数独游戏。 Board 是一个从 0 到 9 的二维数字数组,其中 0 是一个空格。我在用 Pygame 显示我的板时遇到问题。当我在板上选择一个数字 5 的方块并输入一个新数字 7 时,Pygame 假设只显示新输入的数字而不是前一个数字。但相反,它在前一个数字上显示新数字(如图片所示)。后端工作完美意味着例如当我输入 7 时,它会在我的二维阵列板上用 7 代替 5。但由于某种原因,它无法在屏幕上正确显示。我负责绘制的代码块如下,包括图片

附言我尝试了函数 pygame.event.pump() 和 pygame.display.flip() 但没有任何帮助。

while game_running:

......code dealing with events........

 for r in range(9):
    for c in range(9):
        #draw small rectangle
        sm_rect = pygame.Rect(c*sm_rect_width,r*sm_rect_height,sm_rect_width,sm_rect_height)
        pygame.draw.rect(game_window,(0,0),sm_rect,1)

        #draw large rectangle if it is time
        if r%3 == 0 and c%3 == 0:
            lrg_rect = pygame.Rect(c/3*lrg_rect_width,r/3*lrg_rect_height,lrg_rect_width,lrg_rect_height)
            pygame.draw.rect(game_window,lrg_rect,3)

        #draw number
            #Render text
        if board[r][c] == 0:
            txt_surface = font.render(" ",True,pygame.Color('dodgerblue2')) 
            game_window.blit(txt_surface,(c*sm_rect_width+17,r*sm_rect_height+15))
        if board[r][c] > 0:
            txt_surface = font.render(str(board[r][c]),r*sm_rect_height+15))
       

  pygame.display.update()

enter image description here

解决方法

感谢 Rabbid76 的建议,我解决了这个问题。

问题是我没有清除每一帧的显示。
屏幕的清除是由函数 screen.fill(color) 完成的,我将它置于 while game_running 循环之外。

我把它放在里面,现在我的屏幕刷新了,电路板可以根据需要工作了。

这里是关于这个问题的更多解决方案: How to clear up screen in pygame?

附言感谢大家的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。