[gelöst] ein Truetype wie ein Bitmap Font laden?

Posted By: tagimbul

[gelöst] ein Truetype wie ein Bitmap Font laden? - 10/15/18 19:46

Man kann ja Fonts' aus Bitmaps laden
Code:
FONT* standard_font = "st_font.pcx";


Kann man auch ein Truetype font(.ttf) auf so eine Weise laden? so das es dann mit einem "FONT* font_name" nutzbar ist?

oder kann man ttf nur installieren?

lg tom laugh
Posted By: Superku

Re: ein Truetype wie ein Bitmap Font laden? - 10/16/18 07:06

Klar, das geht:

FONT* name = "fontname#size(style)";
FONT* arial_font = "Arial#20b"; // truetype font, 20 point bold characters
http://www.conitec.net/beta/afil-font.htm

Wenn es sich bei dem Font nicht um einen Standard TTFont handelt, der auf allen Maschinen vertreten ist, musst du den per AddFontResource hinzufügen und vorm Beenden des Spiels mit RemoveFontResource wieder entfernen.

Bedenke, dass FONTs dann per font_create (oder wie es heißt) erstellt werden müssen, da der FONT wohlmöglich noch nicht vor AddFontResource auf der Maschine existiert.
Also:

FONT* my_font = NULL;
void init_fonts()
{
addFont(...)
my_font = font_create(...);
my_text.font = my_font;
}

Dann hat natürlich Code wie folgender
TEXT *my_text = { font = my_font; };
keinen Effekt, da my_font bei Spielstart noch ungültig ist.
Posted By: tagimbul

Re: ein Truetype wie ein Bitmap Font laden? - 10/16/18 12:15

dankeschön laugh

was muss ich includen für die add funktion?
Wingdi.h finde ich nicht

edit:
ahh "Windows.h" laugh
Posted By: tagimbul

Re: ein Truetype wie ein Bitmap Font laden? - 10/16/18 16:30

...da wäre noch etwas:

um das Font zu entfernen nutzt man ja RemoveFontResource
dafür hab hier einen kleinen code:
Code:
STRING* tmp_pfad = str_create("");
var i;
char char_tmp;
for (i=0; i<  str_len(work_dir) ; i++) // repeat 5 times 
{
	char_tmp = str_getchr(work_dir, i +1) ;
	str_cat(tmp_pfad , char_tmp  );
	if(char_tmp == 92) 
	str_cat(tmp_pfad , _str(char_tmp ) );
}
str_cat(tmp_pfad, "FontsHOMOARAK.ttf"

var font_entfernt = RemoveFontResource ( _chr(tmp_pfad));
ptr_remove (tmp_pfad);
if(font_entfernt  == 0) { error("das Font <HOMOARAK.ttf>konnte nicht entfernt werden." ) ; }




doch wenn ich mit STRING* arbeite returnt mir RemoveFontResource, 0
wenn ich hingegen den pfad manuel eingebe:
Code:
var font_entfernt = RemoveFontResource  ("C:UsersThomasDesktopgamejamwork spaceFontsHOMOARAK.ttf");


dann funktioniert es.
der erste code benutze ich auch um das Font zu laden (der teil der den pfad erstellt), das funktioniert auch, doch wenn ich den selben code nutze um es zu entfernen, dann klapt es nicht.

mit ist dabei aufgefallen das STRING* Probleme zu haben scheint mi, zewimal hinterinander geschribenen \ zeichen (selbst hier im forum hab ich probleme damit :"D )
habe zu dem thema auch nichts im handbuch gefunden.
wie schreibt man in lite_c korrekt die pfade für win api funktionen?

lg tom
Posted By: Superku

Re: ein Truetype wie ein Bitmap Font laden? - 10/16/18 18:23

Benutze Add und Remove einfach ohne Pfadangaben.
Posted By: tagimbul

Re: ein Truetype wie ein Bitmap Font laden? - 10/16/18 19:16

ahh habs gelöst C:

falls jemand eine lite_c variant für fonts addens sucht:

Code:
function remove_font(STRING* font_name)
{
var lenght = str_len(work_dir) + str_len(font_name);
char * char_array = malloc(sizeof(char)* lenght);
strcpy(char_array ,_chr(work_dir));
strcat(char_array , font_name);
var font_entfernt = RemoveFontResource (char_array );
free(char_array );
if(font_entfernt  == 0) error( strcat("folgendes font konnte nicht entfernt werden: " , _chr(font_name))) ; 
}

function add_font(STRING* font_name)
{
var lenght = str_len(work_dir) + str_len(font_name);
char * char_array = malloc(sizeof(char)* lenght);
strcpy(char_array ,_chr(work_dir));
strcat(char_array , font_name);
var font_gefunden = AddFontResource (char_array );
free( char_array );
if(font_gefunden  == 0) error( strcat("folgendes font konnte nicht hinzugefügt werden: " , _chr(font_name))) ; 
}
....

add_font(" \Fonts\HOMOARAK.ttf"); // <-- hier 2x "\" kann es im forum nicht doppelt schreiben



daran denken das von der work_dir aus gesucht wird
© 2024 lite-C Forums