所以我一直在尝试淡入淡出一个图像。我找到了这本教程,我准确地复制了代码,并将图像更改为我的图像,但出现了错误
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, 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
相关问题 更多 >
编程相关推荐