Domanda

I'm trying to fade in the htpCap1 blit. The variable accepts and displays any value of .set_alpha() I call on it directly, but will not change through a running total loop. Any help will be much appreciated.

P.S. Yes, i'm very very new to this and realize this is probably a beginners mistake. As such, thanks in advance for your time.

#================================= 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()
È stato utile?

Soluzione

You assing new values to alpha1 in your for loop, but that doesn't magically change the alpha value of htpCap1. You have to call htpCap1.set_alpha repeatedly.

Also, you'll have to blit htpCap1 to the screen after calling htpCap1.set_alpha. Otherwise, you obviously won't see any change in the opacity.

So, instead of

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

use something like

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

and maybe adjust the "timing" by using a smaller/bigger value than 1

if alpha1 < 255:
    alpha1 += 0.3
    htpCap1.set_alpha(int(alpha1))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top