Die Textausgabe

Textausgabe ist so popelig, dass sie eigentlich nicht mal eine eigene Seite verdient hat, aber irgendwie ist sie halt doch essentiell wichtig. Also hier ein Kurzer Code:

Einach nur einen Text ausgeben

#include <AllegroW/Allegro.hpp>
 
int main(){
    allg::initialisieren(1024, 768);
 
    textprintf_ex(screen, font, 0, 0, makecol(0, 100, 243), -1, "Dieser Text Wurde mit %s %i mal ausgegeben.", "textprintf_ex", 1);
    _sleep(5000);
 
    return 0;
}END_OF_MAIN()

Die Magie ist das textprintf_ex() es gibt einen, wie mit printf() formatierten String auf eine Bild aus. Das erste Parameter ist das Ziel, das zweite ist die Font, also die Schriftart, in der der Text da stehen soll. font ist ein globaler Zeiger auf die standardt-Font. Dann kommen die X- und Y-Werte, an denen der Text starten soll, anschließend die Schriftfarbe, und dann die Hintergrundfarbe, wobei -1 für durchsichtig steht. Ihr könntet genauso gut mit makecol() oder einfach dem Hex-Wert jede andere Farbe angeben. Danach kommt der Eigentliche String, der ausgegeben werden soll. Wer printf() kennt, kann bei der Nächsten Überschrift weiter lesen. Alle die es nicht kennen: hier weiter lesen. Dieser String den ihr hier ausgebt hat den Unglaublichen Vorteil, dass sich beliebig Sachen einfügen lassen. Wie bei cout quasi. Wenn ihr %c schreibt bedeutet das, „hier wird ein character eingefügt“. Wenn ihr %s schreibt bedeutet das, „hier wird ein String eingefügt“. Analog dazu: %i → integer und %d → double. Den vollen Umfang an möglichen Formatierungen könnt ihr in der Cpp-Referenz nachlesen.

Weitere Textausgabe möglichkeiten

Im Allegro-Manual unter Text output findet ihr weitere Funktionen, die text_out_* Funktionen, die im Endeffekt das selbe sind wie die Printf-Funktionen, nur ohne die Möglichkeiten den String zu formatieren. Die Funktionen die center im Namen haben, nehmen den angegeben Punkt (eure X- und Y-Werte) als Mittelpunkt des Angegebenen Strings, und die, die ein right im Namen haben, nehmen den Angegeben Punkt als Rechtes Ende.

Text in eigener Schrift ausgeben

So nun möchten wir Möglicherweise mal einen Text in einer anderen Schrift angeben, oder anderen größe. Dazu brauchen wir erst mal eine Datei, die Informationen über die Schriftart enthält. Solche Dateien werden Font-Datein genannt und haben häufig die Endung *.ttf als sehr gute Quelle dafür kann ich Free Fonts gut empfehlen. Am besten ihr ladet euch dort eine Font runter, die euch gut geällt.

Habt ihr sie? Ja? Gut, dann weiter. Allegro kann mit dem ttf-Format nicht umgehen, deshalb müssen wir die Font in ein Format bringen, mit dem Allegro arbeiten kann, das machen wir mit einem Programm namens FontEd, runterzuladen auf allegro.cc

Dieses Programm kann nun eure ttf-Fonts laden. Dazu geht ihr auf File→Open und dann die ttf-Datei auswählen. Wenn die Frage kommt „Do u want antialiasing“ dann drückt Yes, und wählt anschließend die Größe aus, die der Text später im Programm haben soll. Danach könnt ihr einzelne Buchstaben verändern aber das ist eigentlich unnötig, geht einfach auf File→Save as, gebt einen Namen ein, und als Endung *.pcx Dann bestätigt mit OK.

Nun kopiert die pcx-Datei in das Arbeitsverzeichnis unseres kleinen Text-Programms und modifiziert den Code folgender Maßen:

#include <AllegroW/Allegro.hpp>
 
int main(){
    allg::initialisieren(1024, 768);
 
    FONT *myFont = load_bitmap_font("test.pcx", NULL, NULL);
    //ich habe die Datei halt test.pcx genannt, ihr müsst den namen dann anpassen.
 
    textprintf_ex(screen, myFont, 0, 0, makecol(0, 100, 243), -1, "Dieser Text Wurde mit %s %i mal ausgegeben.", "textprintf_ex()", 1);
    _sleep(5000);
 
    return 0;
}END_OF_MAIN()

Alles was wir hier machen ist ein eigenes Font-Objekt zu erzeugen, und dann unsere Font hineinzuladen. Der Pfad der Font ist das erste Parameter in load_bitmap_font(); das 2te ist wieder die Farbpalette, hier gillt das selbe wie bei load_bitmap(), NULLen ist am Besten. Das Letzte Parameter entzieht sich meinen Kenntnissen, hat irgendwas mit 2 Strings zur Identifizierung zu tun, versteh ich nicht wirklich, aber NULLen funktioniert super :-D Wer es dennoch wissen möchte, soll sich dazu angehalten sehen, es selber nachzulesen

So ich denke mehr muss dazu nicht gesagt werden.

hier gehts zurück zum Bitmap, und hier gehts weiter zur Tastatur