Ich arbeite momentan an einem (wenn man so will Retro-)Spiel mit pygame, das schöne pixelige Grafiken hat. Damit das pixelige auch wirklich konsequent überall wiederzufinden ist, habe ich eine kleine Klasse geschrieben, die die Buchstaben aus einem Bitmap extrahiert und vergrößert. Wenn die Schrift fertig erstellt und vergrößert wurde kann man einfach einen String auf ein Surface schreiben lassen. Dabei sind sowohl farbige Vorder- und Hintergründe als auch ein transparenter Hintergrund möglich.
Leider habe ich keinen Support für Unicode eingebaut. Ich habe mich leider noch nie wirklich mit dem Thema beschäftigt. Ich würde dafür aber gerne Support einbauen, da man schließlich auch als Deutscher nicht komplett mit den paar ASCII-Zeichen zufrieden sein kann. Ein "ä" ist schließlich schöner als ein "ae". Ich werde mich bald mal nach Anleitungen umschauen um auch Unicode zu unterstützen.
Ein Beispiel fehlt übrigens auch noch...
Es würde mich freuen, wenn ihr mir aber jetzt schonmal sagt, was ihr so von dieser Klasse haltet. Spart bloß nicht mit konstruktiver Kritik. (Auch was die Wahl der Begriffe angeht, dieses Modul ist mein erstes, das ich mal nur auf Englisch geschrieben habe. Anders gesagt habe ich es von einem Misch aus Englisch und Deutsch nach Englisch übersetzt )
Zumindest PyLint meckert an ein paar Stellen, dass ich map() verwendet habe. Wie ich gelesen habe mag PyLint wohl List-Comprehensions lieber, aber da ich map(str, ...) verwende, also ein builtin, sollte das doch eigentlich auch in Ordnung sein, oder?
Hier nun der Code: http://pastebin.com/kh9MinAA (paste.pocoo.org ist ja leider abgestellt worden, aber das ist ein anderes Thema...)
Eine neue Schrift erzeugt man wie folgt:
Code: Alles auswählen
# ASCII-Font erzeugen (über charorder kann die Formatierung geändert werden)
font = PixelFont('bilder/Schriftart.png', (8, 8), scale=4)
# Auf das Surface screen schreiben:
font.foreground_color = pygame.Color('black')
font.background_color = pygame.Color('white')
font.write(screen, 'Hi! Wie gehts?\nNaja...', (0, 0))