On 22 Nov 2006 at 21:15, Kamilche wrote:
I have a question - Do you know of a way to get method 3 as outlined
below to be faster? The necessity of doing all those extra blits to
preserve the alpha channel is really slowing things down.
import pygame
[snip some code]
def Run():
bgcolor1 = (255, 255, 255)
bgcolor2 = (192, 192, 192)
bgcolor3 = (128, 128, 128)
nightcolor = [0, 0, 0, 64]
# Create a bitmap - assume this is an expensive operation
# taking a few seconds.
bitmap = pygame.Surface((100, 100), pygame.SRCALPHA,
32).convert_alpha()
pygame.draw.circle(bitmap, (0, 255, 255), [50, 50], 50, 0)
bitmappos = [0, 0]
# Create the nighttime overlay
night = pygame.Surface((WIDTH, HEIGHT/3), pygame.SRCALPHA,
32).convert_alpha()
night.fill(nightcolor)
# Loop forever
quitgame = 0
while not quitgame:
pygame.event.pump()
[snip]
# Look for quit
for e in pygame.event.get():
if e.type in [pygame.QUIT, pygame.MOUSEBUTTONDOWN]:
quitgame = 1
break
elif e.type == pygame.KEYDOWN:
if e.key == 27:
quitgame = 1
break
elif e.type == pygame.MOUSEMOTION:
bitmappos = e.pos
nightcolor[3] = e.pos[0]/float(WIDTH) * 255
night.fill(nightcolor)
Maybe, using colorkey and Surface alpha. But I have a question too.
Do you prepare all your bitmaps (circle) at game startup? More
specifically, would it be expensive to prepare a black and white
mask, to be used as the shader (night), for each bitmap? Even if it
is you can remove excess processing by declaring night as:
pygame.Surface((WIDTH, HEIGHT/3), 0, 32)
and adjust its surface alpha using set_alpha().
Lenard Lindstrom
<len-l@xxxxxxxxx>