为什么 PyGame 中什么也没有画?
Why is nothing drawn in PyGame at all?
我已经在 python 使用 pygame 开始了一个新项目,对于背景,我希望下半部分填充灰色,顶部填充黑色。我以前在项目中使用过矩形绘图,但由于某种原因它似乎被破坏了?我不知道我做错了什么。最奇怪的是每次我 运行 程序的结果都不一样。有时只有黑屏,有时灰色矩形会覆盖部分屏幕,但不会覆盖屏幕的一半。
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()
您需要更新显示。
您实际上是在 Surface
object. If you draw on the Surface associated to the PyGame display, this is not immediately visible in the display. The changes become visibel, when the display is updated with either pygame.display.update()
or pygame.display.flip()
.
上绘图
This will update the contents of the entire display.
pygame.display.flip()
将更新整个显示的内容,pygame.display.update()
只允许更新屏幕的一部分,而不是整个区域。 pygame.display.update()
是 pygame.display.flip()
的优化版本,适用于软件显示,但不适用于硬件加速显示。
典型的 PyGame 应用程序循环必须:
- 通过调用
pygame.event.pump()
or pygame.event.get()
. 来处理事件
- 根据输入事件和时间(分别为帧)更新对象的游戏状态和位置
- 清除整个显示或绘制背景
- 绘制整个场景(绘制所有对象)
- 通过调用
pygame.display.update()
或 pygame.display.flip()
更新显示
- 限制每秒帧数以限制 CPU 使用
pygame.time.Clock.tick
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 See also Event and application loop
只需将您的代码更改为:
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()
应该会有帮助
我已经在 python 使用 pygame 开始了一个新项目,对于背景,我希望下半部分填充灰色,顶部填充黑色。我以前在项目中使用过矩形绘图,但由于某种原因它似乎被破坏了?我不知道我做错了什么。最奇怪的是每次我 运行 程序的结果都不一样。有时只有黑屏,有时灰色矩形会覆盖部分屏幕,但不会覆盖屏幕的一半。
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()
您需要更新显示。
您实际上是在 Surface
object. If you draw on the Surface associated to the PyGame display, this is not immediately visible in the display. The changes become visibel, when the display is updated with either pygame.display.update()
or pygame.display.flip()
.
This will update the contents of the entire display.
pygame.display.flip()
将更新整个显示的内容,pygame.display.update()
只允许更新屏幕的一部分,而不是整个区域。 pygame.display.update()
是 pygame.display.flip()
的优化版本,适用于软件显示,但不适用于硬件加速显示。
典型的 PyGame 应用程序循环必须:
- 通过调用
pygame.event.pump()
orpygame.event.get()
. 来处理事件
- 根据输入事件和时间(分别为帧)更新对象的游戏状态和位置
- 清除整个显示或绘制背景
- 绘制整个场景(绘制所有对象)
- 通过调用
pygame.display.update()
或pygame.display.flip()
更新显示
- 限制每秒帧数以限制 CPU 使用
pygame.time.Clock.tick
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()
只需将您的代码更改为:
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()
应该会有帮助