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 <[EMAIL PROTECTED]>
