为什么在PyGame中什么都没有绘制?

njthzxwz  于 2022-09-20  发布在  其他
关注(0)|答案(2)|浏览(246)

我已经开始了一个新的项目,在Python使用pyGame和背景,我想要的下半部分填充灰色和顶部黑色。我以前在项目中使用过RECT绘图,但由于某种原因,它似乎被打破了?我不知道我做错了什么。最奇怪的是,每次我运行程序时,结果都不同。有时只有一个黑色的屏幕,有时一个灰色的矩形覆盖了屏幕的一部分,但从来没有半个屏幕。

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()
8dtrkrch

8dtrkrch1#

只需将您的代码更改为:

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))
pygame.display.flip() #Refreshing screen

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

这应该会有帮助

x9ybnkn6

x9ybnkn62#

您需要更新显示屏。您实际上是在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应用程序循环必须:

  • 通过调用pygame.event.pump()pygame.event.get()处理事件。
  • 根据输入事件和时间(分别为帧)更新对象的游戏状态和位置
  • 清除整个显示屏或绘制背景
  • 绘制整个场景(绘制所有对象)
  • 通过调用pygame.display.update()pygame.display.flip()更新显示
  • 使用pygame.time.Clock.tick限制每秒帧数以限制CPU使用
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()

repl.it/@Rabbid76/PyGame-MinimalApplicationLoop另见Event and application loop

相关问题