为什么我的Pygame程序中”Screen Fill”没有移除”Blit”?

huangapple go评论112阅读模式
英文:

Why does Screen Fill not Remove Blit in my Pygame Program?

问题

我正在开发一个使用 Pygame 的 Python 程序。我无法完全清空屏幕,因为使用 screen.fill 仍然会导致文本残留。我的代码如下:

  1. while True:
  2. scene0()
  3. for event in pygame.event.get():
  4. if event.type == pygame.QUIT:
  5. pygame.quit()
  6. exit()
  7. elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  8. screen.fill("White")
  9. pygame.display.flip()

scene0() 代码如下:

  1. def scene0():
  2. into_font = pygame.font.Font(None, 200)
  3. intro_surf = into_font.render('游戏名称', False, '黑色').convert()
  4. intro_rect = intro_surf.get_rect(center=(600, 300))
  5. txt_font = pygame.font.Font(None, 90)
  6. text_surf = txt_font.render('按空格键开始', False, "黑色").convert()
  7. text_rect = text_surf.get_rect(center=(600,420))
  8. screen.blit(intro_surf, intro_rect)
  9. screen.blit(text_surf, text_rect)
  10. for event in pygame.event.get():
  11. if event.type == pygame.QUIT:
  12. pygame.quit()
  13. exit()
  14. if exit_button.draw(screen):
  15. run = exit()

场景 0:
Scene 0

使用 screen.fill 后:
After screen fill

英文:

I am developing a Python program which uses Pygame. I cannot clear the screen entirely as using screen.fill still results in lingering text. My code:

  1. while True:
  2. scene0()
  3. for event in pygame.event.get():
  4. if event.type == pygame.QUIT:
  5. pygame.quit()
  6. exit()
  7. elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  8. screen.fill("White")
  9. pygame.display.flip()

The scene0() code:

  1. def scene0():
  2. into_font = pygame.font.Font(None, 200)
  3. intro_surf = into_font.render('Game Name', False, 'Black').convert()
  4. intro_rect = intro_surf.get_rect(center=(600, 300))
  5. txt_font = pygame.font.Font(None, 90)
  6. text_surf = txt_font.render('Press Space to Start', False, "Black").convert()
  7. text_rect = text_surf.get_rect(center=(600,420))
  8. screen.blit(intro_surf, intro_rect)
  9. screen.blit(text_surf, text_rect)
  10. for event in pygame.event.get():
  11. if event.type == pygame.QUIT:
  12. pygame.quit()
  13. exit()
  14. if exit_button.draw(screen):
  15. run = exit()

The scene 0:
Scene 0

After using screen fill:
After screen fill

答案1

得分: 1

Your code isn't working because screen.fill() 清空了屏幕,但在下一个 while 循环迭代中,scene0() 函数会再次在屏幕上绘制一切。您可以创建一个条件,然后调用 scene0() 函数。示例代码:

  1. screen_status = "active"
  2. while True:
  3. if screen_status == "active":
  4. scene0()
  5. elif screen_status == "blank":
  6. screen.fill("White")
  7. pygame.display.flip()
  8. for event in pygame.event.get():
  9. if event.type == pygame.QUIT:
  10. pygame.quit()
  11. exit()
  12. elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  13. screen_status = "blank";

在上面的代码中,最初将 screen_status 变量设置为 active,因此调用 scene0() 函数。然而,当按下空格键时,screen_status 被设置为 blank。因此,屏幕被清空。

如果您希望再次绘制所有内容,可以再次将 screen_status 设置为 active

英文:

Your code isn't working because, screen.fill() clears the screen, but, in the next iteration of the while loop, the scene0() function blits everything on the screen again. You can create a condition and then call the scene0() function. Example code:

  1. screen_status = "active"
  2. while True:
  3. if screen_status == "active":
  4. scene0()
  5. elif screen_status == "blank":
  6. screen.fill("White")
  7. pygame.display.flip()
  8. for event in pygame.event.get():
  9. if event.type == pygame.QUIT:
  10. pygame.quit()
  11. exit()
  12. elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  13. screen_status = "blank"

In the above code, initially the screen_status variable is set to active, so the scene0() function is called. However, when the spacebar is pressed, screen_status is set to blank. So, the screen is cleared.

If you want to blit everything again, you can set screen_status to active again.

huangapple
  • 本文由 发表于 2023年6月15日 16:39:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/76480660.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定