即使在调用 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 显示也没有更新的主要内容,如果未能解决你的问题,请参考以下文章

即使在后台 ios 中也连续调用方法

即使已经实例化了 ManagedBean(例如在 AJAX 调用上),也会调用 @PostConstruct 方法[重复]

即使在递归调用中,“非本地”变量是不是总是从外部循环继承?

即使在调用 pygame.display.update() 后 Pygame 显示也没有更新

为啥即使在我们调用其余调用的同一台服务器上运行 Angular 应用程序也会出现 cors 问题

即使在“保存”调用之后,Django 对象也没有保存