pygame.display.update 导致闪烁或不显示任何内容
pygame.display.update causing flickering or not showing anything
在我的游戏中,我试图做到当你走进一个物体时,它会显示一个图像。
我很确定 pygame.display.update() 每帧都会被调用,否则游戏将完全静止。
然而,当我在碰撞时绘制我的新矩形时,它不会出现,除非我在绘制后放置另一个 pygame.display.update(rect) 。这意味着更新一次被调用两次,一次是在主游戏循环中,一次是在绘制矩形之后。由于多次更新调用,这会导致矩形(现在已绘制)闪烁。
我不明白为什么没有第二次更新调用就无法绘制它。
主游戏循环调用:
def events(self):
#game loop events
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.playing = False
self.running = False
def update(self):
self.all_sprites.update()
def main(self):
while self.playing:
self.events()
self.update()
self.draw()
self.running = False
def draw(self):
self.screen.fill(black)
self.all_sprites.draw(self.screen)
self.clock.tick(FPS)
pygame.display.update()
#create game instance
g= Game()
g.new()
while g.running:
#main gameloop
g.main()
pygame.quit()
sys.exit()
这是我在与我的对象发生碰撞后调用绘制矩形的时间:
def update(self):
self.hitbox.center = numpy.add(self.rect.center,(8,22))
self.interactionhitbox.center = numpy.add(self.rect.center, (8,16))
if(self.showPopup):
# Initialwzng Color
color = (255,0,0)
# Drawing Rectangle
rect = pygame.Rect((0,0,60,60))
pygame.display.update(rect) # WITHOUT THIS LINE IT DOES NOT GET DRAWN, WITH IT IT FLICKERS
pygame.draw.rect(self.game.screen, color, rect)
所以基本上在第二次 pygame.display.update(rect) 调用时它会出现但会闪烁,没有它它根本不会出现
如果这是一个糟糕的问题或格式不正确,我们将不胜感激。我自 2017 年以来就没来过这里!
矩形未绘制,因为稍后 self.screen.fill(black)
会清除屏幕。您必须在 self.screen.fill(black)
之后和 pygame.display.update()
之前绘制矩形。
创建2张图片,选择要绘制的图片update
:
def __init__(self, ...)
# [...]
self.image = ...
self.original_image = self.image
self.image_and_rect = self.image.copy()
pygame.draw.rect(self.image_and_rect, (255,0,0), self.image_and_rect.get_rect(), 5)
def update(self):
self.hitbox.center = numpy.add(self.rect.center,(8,22))
self.interactionhitbox.center = numpy.add(self.rect.center, (8,16))
if self.showPopup:
self.image = self.image_and_rect
else:
self.image = self.original_image
在我的游戏中,我试图做到当你走进一个物体时,它会显示一个图像。 我很确定 pygame.display.update() 每帧都会被调用,否则游戏将完全静止。
然而,当我在碰撞时绘制我的新矩形时,它不会出现,除非我在绘制后放置另一个 pygame.display.update(rect) 。这意味着更新一次被调用两次,一次是在主游戏循环中,一次是在绘制矩形之后。由于多次更新调用,这会导致矩形(现在已绘制)闪烁。
我不明白为什么没有第二次更新调用就无法绘制它。
主游戏循环调用:
def events(self):
#game loop events
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.playing = False
self.running = False
def update(self):
self.all_sprites.update()
def main(self):
while self.playing:
self.events()
self.update()
self.draw()
self.running = False
def draw(self):
self.screen.fill(black)
self.all_sprites.draw(self.screen)
self.clock.tick(FPS)
pygame.display.update()
#create game instance
g= Game()
g.new()
while g.running:
#main gameloop
g.main()
pygame.quit()
sys.exit()
这是我在与我的对象发生碰撞后调用绘制矩形的时间:
def update(self):
self.hitbox.center = numpy.add(self.rect.center,(8,22))
self.interactionhitbox.center = numpy.add(self.rect.center, (8,16))
if(self.showPopup):
# Initialwzng Color
color = (255,0,0)
# Drawing Rectangle
rect = pygame.Rect((0,0,60,60))
pygame.display.update(rect) # WITHOUT THIS LINE IT DOES NOT GET DRAWN, WITH IT IT FLICKERS
pygame.draw.rect(self.game.screen, color, rect)
所以基本上在第二次 pygame.display.update(rect) 调用时它会出现但会闪烁,没有它它根本不会出现
如果这是一个糟糕的问题或格式不正确,我们将不胜感激。我自 2017 年以来就没来过这里!
矩形未绘制,因为稍后 self.screen.fill(black)
会清除屏幕。您必须在 self.screen.fill(black)
之后和 pygame.display.update()
之前绘制矩形。
创建2张图片,选择要绘制的图片update
:
def __init__(self, ...)
# [...]
self.image = ...
self.original_image = self.image
self.image_and_rect = self.image.copy()
pygame.draw.rect(self.image_and_rect, (255,0,0), self.image_and_rect.get_rect(), 5)
def update(self):
self.hitbox.center = numpy.add(self.rect.center,(8,22))
self.interactionhitbox.center = numpy.add(self.rect.center, (8,16))
if self.showPopup:
self.image = self.image_and_rect
else:
self.image = self.original_image