尝试打印文本时,Pygame不更新显示

前端之家收集整理的这篇文章主要介绍了尝试打印文本时,Pygame不更新显示 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试通过遵循此tutorial学习PyGame.
当我当机时,“您已当机”文本仅出现一格,并且几乎立即消失.当我在朋友PC上运行代码时,它运行得很好.

发生的视频:Streamable link

真正应该发生的事情:玩游戏->您当机->文字出现(“您死了”)->等待2秒->游戏重置

我的代码是:

  1. import pygame
  2. import time
  3. pygame.init()
  4. display_width = 800
  5. display_height = 600
  6. crash = False
  7. black = (0,0)
  8. white = (255,255,255)
  9. red = (255,0)
  10. gameDisplay = pygame.display.set_mode((display_width,display_height))
  11. pygame.display.set_caption('lil spacey')
  12. clock = pygame.time.Clock()
  13. characterImage = pygame.transform.scale(pygame.image.load('Longcat.jpg'),(100,100))
  14. spriteWidth = pygame.Surface.get_width(characterImage)
  15. spriteHeight = pygame.Surface.get_height(characterImage)
  16. def spriteCharacter(x,y):
  17. gameDisplay.blit(characterImage,(x,y))
  18. def text_objects(text,font):
  19. textSurface = font.render(text,True,black)
  20. return textSurface,textSurface.get_rect()
  21. def messageDisplay(text):
  22. largeText = pygame.font.Font('freesansbold.ttf',115)
  23. TextSurf,TextRect = text_objects(text,largeText)
  24. TextRect.center = ((display_width/2),(display_height/2))
  25. gameDisplay.blit(TextSurf,TextRect)
  26. pygame.display.update()
  27. time.sleep(2)
  28. gameLoop()
  29. def crash():
  30. messageDisplay('You dead')
  31. def gameLoop():
  32. x = (display_width * 0.45)
  33. y = (display_height * 0.8)
  34. x_change = 0
  35. y_change = 0
  36. gameExit = False
  37. while not gameExit:
  38. for event in pygame.event.get():
  39. if event.type == pygame.QUIT:
  40. pygame.quit()
  41. quit()
  42. if event.type == pygame.KEYDOWN:
  43. if event.key == pygame.K_LEFT:
  44. x_change = -5
  45. elif event.key == pygame.K_RIGHT:
  46. x_change = 5
  47. elif event.key == pygame.K_UP:
  48. y_change = -5
  49. elif event.key == pygame.K_DOWN:
  50. y_change = 5
  51. if event.type == pygame.KEYUP:
  52. if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
  53. x_change = 0
  54. elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
  55. y_change = 0
  56. x += x_change
  57. y += y_change
  58. gameDisplay.fill(white)
  59. spriteCharacter(x,y)
  60. if x > display_width - spriteWidth or x < 0:
  61. crash()
  62. elif y > display_height - spriteHeight or y < 0:
  63. crash()
  64. pygame.display.update()
  65. clock.tick(60)
  66. gameLoop()
  67. pygame.quit()
  68. quit()

我尝试过的

>重新安装Python
>重新安装Pygame

版本:

> Python:3.7.2
> Pygame:1.9.4
>作业系统:macOS Mojave

希望您能提供帮助:)

最佳答案
当您不让pygame处理事件时,在调用pygame.display.update()之后,可能无法重绘窗口.

您可以在pygame.display.update()和time.sleep(2)之间调用pygame.event.get(),但是您应该尝试遵循以下规则:

>只有一个主循环
>每帧调用一次pygame.display.update
>从不调用time.sleep或任何其他长时间运行的阻止功能
>不要从主循环函数调用主循环函数

以防止此类问题.

当发生崩溃时,您应该更改游戏状态以反映这一事实,然后计算直到2秒过去的时间,然后再次更改状态.

猜你在找的Python相关文章