How To Use Pygame Set_alpha() On A Picture
Solution 1:
Another problem that you might be having (besides what monkey said) is that you might need to use surface.convert()
which converts the image into a form where the alpha can be changed. You can do either of the following.
image = pygame.image.load("logo.png")
image = image.convert()
or
image = pygame.image.load("logo.png").convert()
I have found that, although surface.convert_alpha()
should do pretty much the same thing, it doesn't usually work. Try this test code to check.
import pygame, sys
pygame.init()
window=pygame.display.set_mode((1500, 800))
background=pygame.Surface((window.get_rect().width, window.get_rect().height))
background.fill((0, 0, 0))
image=pygame.image.load('InsertImageHere.png')
image=image.convert()
image2=pygame.image.load('InsertImage2Here.png')
image2=image2.convert_alpha()
rect=image.get_rect()
rect2=image2.get_rect()
rect2.left=rect.width+1
i=1whileTrue:
for event in pygame.event.get():
if event.type==12:
pygame.quit()
sys.exit()
image.set_alpha(i)
image2.set_alpha(i)
window.fill((255, 255, 255))
window.blit(background, background.get_rect())
window.blit(image, rect)
window.blit(image2, rect2)
pygame.time.delay(20)
i+=1if i==255:
i=1
pygame.display.update()
In my testings, image 1 faded in properly, but image 2 stayed dark the whole time. You should try it for yourself; your computer might work differently.
If surface.convert_alpha()
does work for you, you should use it, otherwise, do what I said before. This should solve your problem.
You should also note that I used pygame.time.delay(20)
rather than 2000 like you had before. 2000 would be a bit too long if you are increasing the alpha in incraments of one.
Solution 2:
[1] You don't want to load the image every iteration. Because creating a new surface is a slow operation. [2] Your loop draws 225 times, then afterward the final iteration, waits 2000ms.
You want:
image = pygame.image.load("logo.png")
for i in range (225):
background.fill((0,0,0))
image.set_alpha(i)
screen.blit(image,(0,0))
pygame.display.flip()
pygame.time.delay(20)
To fade in and out, you need to keep looping until the player clicks/hits a button. Like this:
import pygame
from pygame.locals import *
# ...def title_loop():
# title screen main loop
image = pygame.image.load("logo.png")
done = False
alpha = 0
alpha_vel = 1# fade alpha in-out while waiting whilenot done:
# get key inputforeventin pygame.event.get():
ifevent.type == QUIT:
done = trueifevent.type == KEYDOWN:
ifevent.key = K_ESCAPE:
done = true# drawif alpha >= 255or alpha <= 0:
alpha_vel *= -1
alpha += alpha_vel
background.fill((0,0,0))
image.set_alpha(i)
screen.blit(image,(0,0))
pygame.display.flip()
pygame.time.delay(20)
Solution 3:
PygameNerd your example is close, but it doesn't really work.
The image.convert() will fade properly, but it doesn't support alpha channel. Try it on a non black background & it shows. The image.convert_alpha() will not fade, but the alpha channel does work properly.
I'm surprised that pygame doesn't support this out of the box, but anyway. Here is an answer: http://www.nerdparadise.com/tech/python/pygame/blitopacity/
Its a bit complex, but works fine. Transparent background & fading all in one package.
Post a Comment for "How To Use Pygame Set_alpha() On A Picture"