当前位置: 首页 > 知识库问答 >
问题:

Pygame,仅在退出Pygame窗口时更新屏幕?

傅浩漫
2023-03-14

我是pygame的新手,我需要一些帮助,因为我的代码工作不正常。

好的,问题是:我希望屏幕在运行时变为白色,但它仍然是黑色的,但是当我按下退出按钮时,它会变为白色大约一秒钟,然后关闭。

当我放一张图片(像player.png)时,也会发生这种情况,它会在退出前出现大约一秒钟。我不知道我做错了什么,

请帮助修复代码并解释为什么会发生这种情况?

代码如下:

import pygame

pygame.init()

screen = pygame.display.set_mode((640,480))
image = pygame.image.load('player.png')
gameExit = False
gameLoop = True

pygame.display.update()
white = (255,255,255)

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)







pygame.display.update()




pygame.quit()
quit()

另外,我没有发现任何错误

共有2个答案

李明贤
2023-03-14

好的,我同意Sloth的观点,但是不要在最后做所有的屏幕更新、填充和屏幕更新,让脚本不那么可读,你应该做一个类似于动画的函数,每次都在while循环结束时运行,并把屏幕更新和屏幕更新的东西放在这个函数中。对不起,这句话连珠炮似的。

哦,你不需要你的GameLoop变量。

商嘉木
2023-03-14

Python是缩进敏感的。在代码中,调用pygame。陈列仅在主循环结束后更新()。

此外,如果两个for循环之间的事件队列中存在事件,则只需将背景绘制为白色,然后为队列中的每个事件填充背景。

请注意,这也可能导致QUIT事件被第二个循环“吞没”的情况。

那么这个

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)

pygame.display.update()

应该是

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

    screen.fill(white)

    pygame.display.update()

 类似资料:
  • 我一直在尝试使用pygame来显示游戏场景,但它似乎已经停止了对我的工作:在pygame关闭之前,它只在我创建的任何屏幕上显示一个灰色框,然后屏幕上应该显示的内容在退出之前短暂闪烁。例如,下面的最小代码显示灰色屏幕5秒钟,然后快速闪烁黑色并退出: 这似乎是屏幕显示的问题,而不是pygame本身的问题,因为我可以使用pg.image制作曲面并将其保存到图像文件中。save(),它们在那里看起来很好。

  • 刚刚开始使用pyplay(python 2.7,win7,i3),并在这里查看教程:http://www.pygame.org/docs/tut/intro/intro.html 当我运行代码示例时: ...从空闲或powershell,只有当鼠标在游戏窗口上移动时,游戏窗口才会更新。我原以为球只会自己弹来弹去。这种鼠标位置相关的性能是不是因为pygame/SDL处理图形模式的方式?它与硬件有关吗

  • 这是我的代码,请记住,我在几天前学习了python,所以我的代码可能制作不正确,等等。我正在尝试制作一个窗口,该窗口将显示一些文本(测试版),并将显示两个小矩形,我想成为按钮。

  • 我刚刚花了相当多的时间来寻找pygame的64位安装,以便与Python3.3一起使用(这里),现在我正在尝试创建一个窗口。然而,尽管窗口打开得很好,但当它按下x按钮时并没有关闭。事实上,我必须关闭闲置关闭窗口。我正在运行Win7的64位版本。这是我的密码: 当我附加 它仍然没有关闭。我唯一的猜测就是那个游戏。退出可能会进入其中一个循环,但即使解决了这个问题,我还是更愿意在需要时关闭窗口。

  • 我试图创建一个程序,它有一个tkinter窗口打开,然后当你按下一个按钮,它关闭tkinter窗口,打开一个pyplay窗口。然而,当我点击按钮打开pyplay窗口时,它会打开pyplay窗口,而tkinter窗口保持打开状态。 代码: 我还尝试使用: 我怎样才能解决这个问题?(我正在MacOS 11.1上运行Python 3.7.7)

  • 所以我正在用pygame做一个游戏,我也想用tkinter。我在tkinter窗口中嵌入了一个pygame窗口,但我似乎什么都做不了。 对于上下文,以下是完整的代码: 当我使用时,什么都不会发生。在类中使用pyplay是有效的,但是在我更复杂的游戏中,为所有变量使用self.variable似乎是不必要的。 如何在window类之外的pygame窗口中运行代码?