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

I

Iacopo.Marmo

Hi! I need to manipulate multicolor strings, i.e. strings with a color
associated with each letter.
Any suggestions?
 
J

Jorge Godoy

Hi! I need to manipulate multicolor strings, i.e. strings with a color
associated with each letter.
Any suggestions?

If you're on Unix / Linux the curses module might help.
 
D

Diez B. Roggisch

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
 
D

Diez B. Roggisch

Diez said:
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)

Don't drink and code... *sigh*

Of course you can just create an equally dimensioned image for each
character and each color (cached or not, however you like it), and just
blit these one after another, offsetting them with the character width.

Diez
 
I

Iacopo.Marmo

Of course you can just create an equally dimensioned image for each
character and each color (cached or not, however you like it), and just
blit these one after another, offsetting them with the character width.

Diez

thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,262
Messages
2,571,045
Members
48,769
Latest member
Clifft

Latest Threads

Top