为什么 PyGame 中根本没有绘制任何内容?

Min*_*Bat 6 python pygame rectangles

我已经使用 pygame 在 python 中启动了一个新项目,对于背景,我希望下半部分填充灰色,顶部填充黑色。我以前在项目中使用过矩形绘图,但由于某种原因它似乎被破坏了?我不知道我做错了什么。最奇怪的是,每次运行程序的结果都不一样。有时只有黑色屏幕,有时灰色矩形覆盖屏幕的一部分,但永远不会覆盖屏幕的一半。

import pygame, sys
from pygame.locals import *
pygame.init()

DISPLAY=pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
Run Code Online (Sandbox Code Playgroud)

Rab*_*d76 4

您需要更新显示。您实际上是在一个物体上绘图Surface。如果您在与 PyGame 显示关联的Surface上绘图,则这不会立即在显示中可见。pygame.display.update()当使用或更新显示时,更改变得可见pygame.display.flip()

pygame.display.flip()

这将更新整个显示的内容。

虽然pygame.display.flip()会更新整个显示的内容,但pygame.display.update()允许仅更新屏幕的一部分,而不是整个区域。pygame.display.update()是针对软件显示的优化版本pygame.display.flip(),但不适用于硬件加速显示。

典型的 PyGame 应用程序循环必须:

import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

    # limit frames per second
    clock.tick(60)

pygame.quit()
exit()
Run Code Online (Sandbox Code Playgroud)

repl.it/@Rabbid76/PyGame-MinimalApplicationLoop另请参见事件和应用程序循环