how to create a multicolor "font-string" in pygame??

Diez B. Roggisch deets at nospam.web.de
Thu Nov 9 23:54:49 CET 2006


Iacopo.Marmo at gmail.com schrieb:
> Hi! I need to manipulate multicolor strings, i.e. strings with a color
> associated with each letter.
> Any suggestions?

There is no support for multi-color strings as such in pygame. If you 
use a fixed-width font, things are easy. Just create the strings one 
after another using spaces as prefix. E.g.

back = (0,0,0)
font = pygame.font.Font(font_fn, size)
images = []
for i, c in enumerate("colored string"):
     s = " " * i + c
     color = color_for_index(i)
     s_image = font.render(s, True, color, back)
     images.append(s_image)


Then blit the images onto each other.

If you don't use fixed widht fonts, things get more complicated. Then 
you should calculate the size of the prefix to a certain characer, and 
store that together with the image:

text = "colored string"
back = (0,0,0)
font = pygame.font.Font(font_fn, size)
images = []
for i, c in enumerate(text):
     s = " " * i + c
     color = color_for_index(i)
     prefix_offest = font.size(text[:i])
     s_image = font.render(s, True, color, back)
     images.append((prefix_offset, s_image))

Then you have to combine the images according to the prefix offset.

Diez



More information about the Python-list mailing list