Python通过运行total循环更改alpha

Python通过运行total循环更改alpha,python,pygame,Python,Pygame,我正试图在htpCap1 blit中淡出。该变量接受并显示我直接调用的.set_alpha()的任何值,但不会通过运行的total循环进行更改。任何帮助都将不胜感激 是的,我对这个很陌生,意识到这可能是初学者的错误。因此,提前感谢您抽出时间 #================================= Setup ======================================= #imports import pygame import sys

我正试图在htpCap1 blit中淡出。该变量接受并显示我直接调用的.set_alpha()的任何值,但不会通过运行的total循环进行更改。任何帮助都将不胜感激

是的,我对这个很陌生,意识到这可能是初学者的错误。因此,提前感谢您抽出时间

#================================= Setup =======================================
    #imports
    import pygame
    import sys
    import os
    import time
    import pyganim


    #Init
    pygame.mixer.init()
    pygame.mixer.pre_init(44100, -16, 2, 2048)
    pygame.init()

    # Game Window Size
    WINDOWWIDTH = 1600
    WINDOWHEIGHT =  900
    windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)


    # Game Window Captions
    pygame.display.set_caption('Project Apprentice')


    #StaticIMGs
    htpCap1 = pygame.image.load('sprites/htpcapt1.gif').convert(24)
    alpha1 = 0
    htpCap1.set_alpha(alpha1)
    htpLeft = pygame.image.load('sprites/htpleft.png')
    sprite = pygame.image.load('sprites/sprite_down.gif')
    wasd = pygame.image.load('sprites/htpctrlorig.gif')
    w = pygame.image.load('sprites/htpctrlW.gif')
    a = pygame.image.load('sprites/htpctrlA.gif')
    s = pygame.image.load('sprites/htpctrlS.gif')
    d = pygame.image.load('sprites/htpctrlD.gif')


    #Anim
    frameAnim = pyganim.PygAnimation([('sprites/htp1.gif', 0.07),
                                      ('sprites/htp2.gif', 0.07),
                                      ('sprites/htp3.gif', 0.07)])
    frameAnim.play()

    spriteUp = pyganim.PygAnimation([('sprites/sprite_up.gif', 0.1),
                                     ('sprites/sprite_move_up.000.gif', 0.1),
                                     ('sprites/sprite_move_up.001.gif', 0.1),
                                     ('sprites/sprite_move_up.002.gif', 0.1)])
    spriteLeft = pyganim.PygAnimation([('sprites/sprite_left.gif', 0.01),
                                     ('sprites/sprite_move_left.000.gif', 0.1),
                                     ('sprites/sprite_move_left.001.gif', 0.1),
                                     ('sprites/sprite_move_left.002.gif', 0.1)])
    spriteDown = pyganim.PygAnimation([('sprites/sprite_down.gif', 0.1),
                                     ('sprites/sprite_move_down.000.gif', 0.1),
                                     ('sprites/sprite_move_down.001.gif', 0.1),
                                     ('sprites/sprite_move_down.002.gif', 0.1)])
    spriteRight = pyganim.PygAnimation([('sprites/sprite_right.gif', 0.01),
                                     ('sprites/sprite_move_right.000.gif', 0.1),
                                     ('sprites/sprite_move_right.001.gif', 0.1),
                                     ('sprites/sprite_move_right.002.gif', 0.1)])

    BGCOLOR = (255, 255, 255)


    # Clock function
    mainClock = pygame.time.Clock()




    #===========================  Program Loop ===================================
    done = False
    while done == False:
        for event in pygame.event.get(): 
            if event.type == pygame.QUIT:
                done = True

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    import menuscreen
                    done = True

        windowSurface.fill((BGCOLOR))

        frameAnim.blit(windowSurface, (800,0))
        windowSurface.blit(htpLeft, (0,0))
        windowSurface.blit(htpCap1, (20,120))


        for i in range(255):
            alphaChange = 1
            alpha1 += alphaChange        

        ticks = pygame.time.get_ticks()
        if ticks < 5000:
            windowSurface.blit(sprite, (1180,310))
            windowSurface.blit(wasd, (1050,600))        
        if ticks > 5001:
            spriteRight.blit(windowSurface, (1180,310))
            spriteRight.play()
            windowSurface.blit(d, (1050,600))
        if ticks >= 9000:
            spriteRight.stop()
            spriteDown.blit(windowSurface, (1180,310))
            spriteDown.play()
            windowSurface.blit(s, (1050,600))
        if ticks >= 11000:
            spriteDown.stop()
            spriteLeft.blit(windowSurface, (1180,310))
            spriteLeft.play()
            windowSurface.blit(a, (1050,600))
        if ticks >= 13000:
            spriteLeft.stop()
            spriteUp.blit(windowSurface, (1180,310))
            spriteUp.play()
            windowSurface.blit(w, (1050,600))
        if ticks >= 16000:
            spriteUp.stop()
            windowSurface.blit(sprite, (1180,310))
            windowSurface.blit(wasd, (1050,600))


        pygame.display.update()
        mainClock.tick(60) # Feel free to experiment with any FPS setting.
    pygame.quit()
#======================================================设置=======================================
#进口
导入pygame
导入系统
导入操作系统
导入时间
进口皮加尼姆
#初始化
pygame.mixer.init()
pygame.mixer.pre_init(44100,-16,22048)
pygame.init()
#游戏窗口大小
窗宽=1600
窗高=900
windowSurface=pygame.display.set_模式((窗口宽度,窗口高度),0,32)
#游戏窗口字幕
pygame.display.set_标题('项目学徒')
#静力学
htpCap1=pygame.image.load('sprites/htpcapt1.gif')。转换(24)
字母1=0
htpCap1.set_alpha(alpha1)
htpLeft=pygame.image.load('sprites/htpLeft.png')
sprite=pygame.image.load('sprite/sprite\u down.gif')
wasd=pygame.image.load('sprites/htpctrlorig.gif')
w=pygame.image.load('sprites/htpctrlW.gif')
a=pygame.image.load('sprites/htpctrlA.gif')
s=pygame.image.load('sprites/htpctrlS.gif')
d=pygame.image.load('sprites/htpctrlD.gif')
#动画
frameAnim=pyganim.pyganization([('sprites/htp1.gif',0.07),
('sprites/htp2.gif',0.07),
('sprites/htp3.gif',0.07)])
frameAnim.play()
spriteUp=pyganim.pyganization([('sprites/sprite_up.gif',0.1),
('sprite/sprite\u move\u up.000.gif',0.1),
('sprite/sprite\u move\u up.001.gif',0.1),
('sprite/sprite\u move\u up.002.gif',0.1)])
spriteLeft=pyganim.pyganization([('sprites/sprite_left.gif',0.01),
('sprite/sprite\u move\u left.000.gif',0.1),
('sprite/sprite_move_left.001.gif',0.1),
('sprite/sprite\u move\u left.002.gif',0.1)])
spriteDown=pyganim.pyganization([('sprites/sprite_down.gif',0.1),
('sprite/sprite\u move\u down.000.gif',0.1),
('sprite/sprite\u move\u down.001.gif',0.1),
('sprite/sprite\u move\u down.002.gif',0.1)])
spriteRight=pyganim.pyganization([('sprites/sprite_right.gif',0.01),
('sprite/sprite\u move\u right.000.gif',0.1),
('sprite/sprite\u move\u right.001.gif',0.1),
('sprite/sprite\u move\u right.002.gif',0.1)])
BGCOLOR=(255、255、255)
#时钟功能
mainClock=pygame.time.Clock()
#========================================程序循环===================================
完成=错误
完成时==False:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_退出:
导入菜单屏幕
完成=正确
窗口表面填充((BGCOLOR))
框架动画blit(窗口表面,(800,0))
窗台表面布氏硬度(htpLeft,(0,0))
窗台表面。blit(htpCap1,(20120))
对于范围(255)内的i:
字母变化=1
字母1+=字母变化
ticks=pygame.time.get_ticks()
如果刻度<5000:
窗台表面。布利特(雪碧,(1180310))
窗台表面。blit(wasd,(1050600))
如果刻度>5001:
窗台表面(1180310))
轻快地玩
窗台表面。布利特(d,(1050600))
如果刻度>=9000:
停下来
喷水池(窗台表面,(1180310))
spriteDown.play()
窗台表面。布利特(s,(1050600))
如果刻度>=11000:
spriteDown.stop()
喷水窗(窗台表面,(1180310))
spriteLeft.play()
窗台表面。布利特(a,(1050600))
如果刻度>=13000:
停下来
玻璃窗表面(1180310))
精神游戏
窗台表面布利特(w,(1050600))
如果刻度>=16000:
停下来
窗台表面。布利特(雪碧,(1180310))
窗台表面。blit(wasd,(1050600))
pygame.display.update()
mainClock.tick(60)#可以随意尝试任何FPS设置。
pygame.quit()

在for循环中将新值分配给
alpha1
,但这不会神奇地改变
htpCap1
的alpha值。您必须反复调用
htpCap1.set_alpha

此外,在调用
htpCap1.set_alpha
后,您必须将
htpCap1
快速切换到屏幕。否则,您显然不会看到不透明度的任何变化

因此,与其

for i in range(255):
    alphaChange = 1
    alpha1 += alphaChange    
使用类似

if alpha1 < 255:
    alpha1 += 1
    htpCap1.set_alpha(alpha1)

乍一看,您的for循环似乎做得不多。它本质上只是在alpha1上增加了255个字符。可能是个线索。首先,感谢大家的回答。现在请原谅我,如果我似乎没有遵循:如果alpha1是htpCap1.set_alpha()的值,那么为什么添加255不会增加不透明度?谢谢!我为范围(0255)内的I编写了这个
alphaChange=1:alpha1+=alphaChange htpCap1.set_alpha(alpha1)windowSurface.blit(htpCap1,(20120))
if alpha1 < 255:
    alpha1 += 0.3
    htpCap1.set_alpha(int(alpha1))