即使在调用 pygame.display.update() 后 Pygame 显示也没有更新
Posted
技术标签:
【中文标题】即使在调用 pygame.display.update() 后 Pygame 显示也没有更新【英文标题】:Pygame display not being updated even after pygame.display.update() is called 【发布时间】:2020-05-04 03:01:09 【问题描述】:我正在尝试在 pygame 中创建一个简单的程序,它会显示通向鼠标的线条,但即使在我调用 pygame.display.update()
后线条也不会消失。整个屏幕开始被线条填满。代码如下:
import pygame
pygame.init()
win = pygame.display.set_mode((720,360))
pygame.display.set_caption("Random Code")
run = True
font = pygame.font.SysFont("javanesetext",30,True,False)#Bold = True, Italic = False
text = font.render("Hi",1,(255,0,0))
clock = pygame.time.Clock()
mousePos = pygame.mouse.get_pos()
def redrawGameWindow():
win.blit(text,(36,36))
pygame.draw.line(win,(255,255,255),(mousePos[0],0),(mousePos[0],360))
while run:
mousePos = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
redrawGameWindow()
pygame.display.update()
你能帮我解决这个问题吗?
【问题讨论】:
你能分享你的错误日志吗? @dejdej,没有错误日志。这就是问题所在。白线将开始填满屏幕。但是多亏了 Thaer A 和 The Big Kahuna,我已经解决了这个问题。感谢您的关心。 【参考方案1】:将win.fill((0, 0, 0))
添加到您的redrawGameWindow()
函数以重绘屏幕上的背景:
def redrawGameWindow():
win.fill((0, 0, 0))
win.blit(text,(36,36))
pygame.draw.line(win,(255,255,255),(mousePos[0],0),(mousePos[0],360))
【讨论】:
【参考方案2】:问题是你需要重绘屏幕的背景。 pygame.display.update()
只添加到屏幕上,不会清除它并绘制。所以你需要自己用win.fill((0,0,0))
清除它。这会将整个屏幕绘制为黑色,因此您可以再次在其上绘制
def redrawGameWindow():
win.fill((0,0,0))
win.blit(text,(36,36))
pygame.draw.line(win,(255,255,255),(mousePos[0],0),(mousePos[0],360))
【讨论】:
如果我使用图片作为背景会发生什么?我还需要win.fill((0,0,0))
吗?
@YQStack 不,只要你在整个屏幕上绘制了一些东西,就可以了。因为一旦你把东西放在屏幕上,你就不能把它取下来,所以你必须用别的东西来覆盖它,背景,可以是任何东西,颜色或图像以上是关于即使在调用 pygame.display.update() 后 Pygame 显示也没有更新的主要内容,如果未能解决你的问题,请参考以下文章
即使已经实例化了 ManagedBean(例如在 AJAX 调用上),也会调用 @PostConstruct 方法[重复]
即使在调用 pygame.display.update() 后 Pygame 显示也没有更新