1

在我的游戏中,我试图让它当你走进一个物体时,它会显示一个图像。我很确定每帧都会调用 pygame.display.update() ,否则游戏将完全静止。

但是,当我在碰撞时绘制我的新矩形时,它不会出现,除非我在绘制后放置另一个 pygame.display.update(rect) 。这意味着 update 一次被调用两次,在主游戏循环中和绘制矩形之后。由于多次更新调用,这会导致矩形(现在已绘制)闪烁。

我无法弄清楚为什么没有第二次更新调用就不会绘制它。

主游戏循环调用:

  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 年以来就没有来过这里!

4

1 回答 1

1

矩形未绘制,因为稍后将清除屏幕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
于 2021-10-23T20:37:16.780 回答