【问题标题】:How can i hide screen.blit()我如何隐藏 screen.blit()
【发布时间】:2021-05-20 08:19:23
【问题描述】:

我在游戏中制作了背景音乐,我将音量静音和非静音精灵设置为可点击, 当您将音乐静音时,我希望 screen.blit(unmute) 消失。

源代码:

...
x = 0
pygame.mixer.music.load("soundtrack.wav")
volume = pygame.image.load("volume.png")
mute = pygame.image.load("mute.png")
resized_volume = pygame.transform.scale(volume, (100, 100))
resized_mute = pygame.transform.scale(mute, (100,100))
pygame.mixer.music.play(-1,0.0)


while Loop: # main game loop
...


        if event.type == MOUSEBUTTONDOWN:
            if event.button == 1: # 1 == left
                vol_rect = volume.get_rect(topleft = (700,500))
                if vol_rect.collidepoint(event.pos):
                    x += 1
                    if x > 2:
                        x = 1
                    if x == 1:
                        screen.blit(mute,(700,500))
                        pygame.mixer.music.pause()
                    else:
                        if x == 2:
                            screen.blit(volume, (700,500))
                            pygame.mixer.music.unpause()

...

pygame.quit()
sys.exit()

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

    您必须在每一帧中重新绘制场景。根据变量x 的值绘制精灵。例如:

    while Loop: # main game loop
    
        # [...]
    
        if event.type == MOUSEBUTTONDOWN:
            if event.button == 1: # 1 == left
                # [...]
    
        # [...]
    
        if x == 0:
            # [...] draw something different
        elif x == 1:
            screen.blit(mute,(700,500))
        elif x == 2:
            screen.blit(volume, (700,500))
    
        # [...]
    

    【讨论】:

      【解决方案2】:

      我没有尝试,但我希望它有效:

      class MuteUnmute_Button:
          def __init__(self):
              self.x = 500
              self.y = 400
              self.state = True
              self.mute_image = pygame.image.load("mute_image.png")
              self.unmute_image = pygame.image.load("unmute_image.png")
              self.image = mute_image
              self.screen = screen
          def redraw(self):
              self.screen.blit(self.image,(self.x,self.y))
          def checkCollision(self):
              rect = self.image.get_rect()
              return rect.collidepoint(pygame.mouse.pos)
          def changeImage(self):
              if self.state:
                  self.image = self.mute_image
              else:
                  self.image = self.unmute_image
      
      mute_unmute_button = MuteUnmuteButton()
      
      while Loop:
          for event in pygame.event.get():
              if event.type == MOUSEBUTTONDOWN:
                  if event.button == 1:
                      if mute_unmute_button.checkCollision():
                          if mute_unmute_button.state:
                              mute_unmute_button.state = False
                              mute_unmute_button.changeImage()
                              pygame.mixer.music.pause()
                          else:
                              mute_unmute_button.state = True
                              mute_unmute_button.changeImage()
                              pygame.mixer.music.unpause()
          screen.fill((255,255,255)) #Fills background
          mute_unmute_button.redraw()
          pygame.display.flip()
      

      我举了一个例子,你可以为你的程序更改代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-26
        • 2018-06-05
        • 1970-01-01
        • 2013-11-25
        • 2012-12-15
        • 1970-01-01
        • 2018-07-08
        • 2011-07-09
        相关资源
        最近更新 更多