微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何淡入淡出图像

如何解决如何淡入淡出图像

所以我一直在尝试淡入淡出图像。我找到了这个教程,我准确地复制了代码并将图像更改为我的图像,但出现错误

File "C:\Users\Me\Documents\Fan game\Start-Up.py",line 114,in <module>
    main(screen)
  File "C:\Users\Me\Documents\Fan game\Start-Up.py",line 91,in main
    fade = CrossFade(screen)
  File "C:\Users\Me\AppData\Local\Programs\Python\python39\lib\site-packages\pygame\sprite.py",line 115,in __init__
    self.add(*groups)
  File "C:\Users\Me\AppData\Local\Programs\Python\python39\lib\site-packages\pygame\sprite.py",line 133,in add
    self.add(*group)
TypeError: pygame.sprite.Sprite.add() argument after * must be an iterable,not pygame.Surface

我不知道这些错误是什么意思。

这是我的代码

import pygame
pygame.init()

screen = pygame.display.set_mode((640,480))

class CrossFade(pygame.sprite.Sprite):
    """Synthesizes fade by incrementing the transparency
        of a black surface blitted on top of screen"""
    def _init_(self,screen):
        pygame.sprite.Sprite._init_(self)
        
        #Make a surface to be used as our fader
        #The size is dynamically based on size of the screen
        self.image = pygame.surface(screen.get_size())
        self.image = self.image.convert()
        self.image.fill((0,0))
        
        #Get the Rect dimensions
        self.rect = self.image.get_rect()
        
        #fade_dir determines whether to fade in or fade out
        self.fade_dir = 1
        
        #trans_value is the degree of transparency
        #225 is opaque/0 is fully transparent
        self.trans_value = 255
        
        #fade_speed is the difference in transparency after each delay
        self.fade_speed = 6
        
        #Delay helps to dynamically adjust the number of frames between fades
        self.delay = 1
        
        #Increment increases each frame (each call to update)
        #until it is equal to our delay (see update() below)
        self.increment = 0
        
        #Initialize our transparency (at opaque)
        self.image.set_alpha(self.trans_value)
        
        #Set position of black surface
        self.rect.centerx = 320
        self.rect.centery = 240
        
    def update(self):
        self.image.set_alpha(self.trans_value)
        #Increase increment
        self.increment += 1
        
        if self.increment >= self.delay:
            self.increment = 0
            
            #Fade in
            if self.fade_dir > 0:
                #Make sure the transparent value doesn't go negative
                if self.trans_value - self.fade_speed < 0:
                    self.trans_value = 0
                #Increase transparency of the black surface by decreasing its alpha
                else:
                    self.trans_value -= self.fade_speed
            
            #Fade out
            elif self.fade_dir < 0:
                #Make sure transparency value doesn't go above 225
                if self.trans_value + self.delay > 225:
                    self.trans_value = 225
                #Increase opacity of black surface
                else:
                    self.trans_value += self.fade_speed
    
def main(screen):
    pygame.display.set_caption("Start-Up")
        
    clock = pygame.time.Clock()
    keepPlaying = True
        
    #Image you'd like to fade over
    logo = pygame.image.load("office.png")
        
    screen.blit(logo,(0,0))
        
    #CrossFade must be in a sprite group so we can use the .clear() method
    #of sprite updating
    fade = CrossFade(screen)
    all_Sprites = pygame.sprite.Group(fade)
        
    while keepPlaying:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                keepPlaying = False
                
        #Reset the fade after a time-controlled delay
        if fade.trans_value == 0:
            pygame.time.delay(1500)
            fade.fade_dir *= -1
            
        #C.U.D. Sprite Group Dirty Blitting
        all_Sprite.clear(screen,logo)
        all_Sprite.update()
        all_Sprites.draw(screen)
            
        #Refresh the screen
        pygame.display.flip()
            
#MAIN
main(screen)
pygame.quit()

我不知道出了什么问题,如果您有更好/替代的方法来做到这一点,请告诉我

解决方法

我想出了一个更好的方法来做到这一点:D

import pygame
import time

pygame.init()

display_size = pygame.display.Info().current_w,pygame.display.Info().current_h - 50
screen = pygame.display.set_mode(display_size)
image = pygame.image.load(r'textures\logo.png')
image_size = image.get_rect().size

centered_image = [(display_size[0] - image_size[0])/2,(display_size[1] - image_size[1])/2]

time.sleep(1)

for i in range (255):
    screen.fill((0,0))    
    image.set_alpha(i)    
    screen.blit(image,centered_image)    
    pygame.display.update()    
    time.sleep(0.001)

time.sleep(1.5)

for i in range (255,-1):
    screen.fill((0,0))       
    image.set_alpha(i)    
    screen.blit(image,centered_image)    
    pygame.display.update()    
    time.sleep(0.001)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。