如何解决如何淡入淡出图像
所以我一直在尝试淡入淡出图像。我找到了这个教程,我准确地复制了代码并将图像更改为我的图像,但出现错误;
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 举报,一经查实,本站将立刻删除。