Hallo Community!
Als ich mich letztens geärgert habe das man jedesmal bevor ich einen Text zeichnen und eine andere schriftart haben will, einen draw_set_color() Befehl aufrufen muss, dachte ich mir ich schreib mir einen Script der dies "erleichter".
Um gleich auf den Punkt zu kommen, hier ein kleines Bildchen:
Scripts die benötigt werden
draw_my_text ( (real) x, (real) y, (string) text)
Spoiler anzeigen
Alles anzeigen
string_string_at ( (string) str, (string) substr, (real) pos)
Spoiler anzeigen
Alles anzeigen
Der Aufruf der Funktion sieht folgendermaßen aus:
Hab noch ein kleines Beispiel vorbereitet (Im Anhang)
Dies ist mein erstes Tutorial und daher hofe ich um euer Verständnis falls ich es ein bisschen falsch erklärt habe oder sogar umständlich meinen Code geschrieben habe. Ich weiß auch nicht ob er performence mäßig toll ist, aber wie gesagt das ist mein erstes Tutorial. Vllt werde ich aucht noch andere "Tags" einbauen, die z.B.: Den Text unterstreichen oder fett schreiben, oder das font ändern. Kommt drauf an ob das überhaupt jemand braucht oder nützlich findet.
MfG rodrog
Als ich mich letztens geärgert habe das man jedesmal bevor ich einen Text zeichnen und eine andere schriftart haben will, einen draw_set_color() Befehl aufrufen muss, dachte ich mir ich schreib mir einen Script der dies "erleichter".
Um gleich auf den Punkt zu kommen, hier ein kleines Bildchen:
Scripts die benötigt werden
draw_my_text ( (real) x, (real) y, (string) text)
GML-Quellcode
- /**************************************************************************************************************************/
- // draw_my_text(x,y,str)
- // Erklärung:
- // Zeichnet einen Text an der Position x/y:
- // Sonderheit:
- // Es kann ein Schlüsselwort übergeben werden um den Text andersfabig zu zeichnen.
- // Beispiel:
- // draw_my_text(x,y,"<!c_255000000!>Auto");
- // //Alles nach diesem "Tag" wird rot gezeichnet
- //
- // draw_my_text(x,y,"<!c_normal!>Auto");
- // //Alles nach diesem "Tag" wird mit der eingestellten Farbe gezeichnet
- //
- /**************************************************************************************************************************/
- var pos_x,pos_y,text, i,j, line,buffer, tmpcolor;
- pos_x = argument0; //Sollte klar sein
- pos_y = argument1; //Sollte klar sein
- text = argument2; //Sollte auch klar sein
- tmpcolor = draw_get_color(); //Speichert die eingestellte Farbe um sie falls der normal-Tag aufgerufen wird zu zeichnen
- line = 0; //Wird benötigt um Zeilenbrüche zu zählen
- buffer = ""; //Wird benötigt um den Zeichenabstand berechnen zu können
- for(i=0;i<string_length(text)+1;i+=1) { //Ich gehe den ganzen Text durch um seine Zeichen zu prüfen
- if(string_string_at(text, "<!c_?????????!>",i)) { //Es wird überprüft ob der Text die Farbe wechseln wird
- color = string_copy(text, i+5, 9); //Hier wird die Farbkombination aus dem String "herausgefischt"
- draw_set_color(make_color_rgb(real(string_copy(color,1,3)),real(string_copy(color,4,3)),real(string_copy(color,7,3)))); //Die Farbkombination wird in den RGB-Code geteilt
- text = string_delete(text,i+1,string_length("<!c_?????????!>")); //Der Farb-Tag wird gelöscht (damit er nicht geschrieben wird
- } else if ((string_string_at(text, "<!c_normal!>",i))) { //Es wird überprüft ob der Text die Farbe wechseln wird
- draw_set_color(tmpcolor); //Die Farbe wird auf die oben voreingestellte Farbe gewechselt
- text = string_delete(text,i+1,string_length("<!c_normal!>")); //Der Normal-Tag wird wieder gelöscht
- }
- if(string_char_at(text,i+1) == "#") { //Es wird überprüft ob ein Zeilenumbruch verlangt wird
- line += 1; //dann wird ein Zeilenumbruch hinzugefügt
- buffer = ""; //und der buffer auf 0 gesetzt
- } else {
- draw_text(pos_x+string_width(buffer),pos_y+string_height("A")*line, string_char_at(text,i+1)); //hier wird jedes zeichen einzelnt gezeichnet und lines sowie die buffer-länge berücksichtigt
- buffer += string_char_at(text,i+1); //Der Buffer wird um das gezeichnete Zeichern erhöht
- }
- }
- draw_set_color(tmpcolor); //Die alte Farbe wird wieder eingestellt, da die Funktion nicht mit anderen draw-Funktionen in Konflikt treffen sollte
string_string_at ( (string) str, (string) substr, (real) pos)
GML-Quellcode
- /**************************************************************************************************************************/
- // string_string_at(str, substr, pos)
- // Erklärung:
- // Es wird überprüft ob der substr an der Position pos vorkommt.
- // z.B.:
- // str = "Autobahn"
- // substr = "bahn"
- // pos = 5
- // => return true
- //
- // str = "Autobahn"
- // substr = "fahrt"
- // pos = 5
- // => return false
- //
- // str = "Autobahn"
- // substr = "b??n"
- // pos = 5
- // => return true
- //
- //
- // Ob ein Zeichen egal sein sollte kann mit einem Fragezeichen dargestellt werden (Siehe Beispiel 3) //
- /**************************************************************************************************************************/
- var str,substr, pos, i, correct;
- str = argument0;
- substr = argument1;
- pos = argument2;
- correct = true;
- for(i = pos; i < pos+string_length(substr) && correct == true;i+=1) {
- if(string_char_at(str,i+1) != string_char_at(substr, i-pos+1) && string_char_at(substr, i-pos+1) != "?") {
- correct = false;
- }
- }
- return correct;
Der Aufruf der Funktion sieht folgendermaßen aus:
Hab noch ein kleines Beispiel vorbereitet (Im Anhang)
Dies ist mein erstes Tutorial und daher hofe ich um euer Verständnis falls ich es ein bisschen falsch erklärt habe oder sogar umständlich meinen Code geschrieben habe. Ich weiß auch nicht ob er performence mäßig toll ist, aber wie gesagt das ist mein erstes Tutorial. Vllt werde ich aucht noch andere "Tags" einbauen, die z.B.: Den Text unterstreichen oder fett schreiben, oder das font ändern. Kommt drauf an ob das überhaupt jemand braucht oder nützlich findet.
MfG rodrog
Je mehr Käse, desto mehr Löcher.
Je mehr Löcher, desto weniger Käse.
Ergo: Je mehr Käse, desto weniger Käse.
Je mehr Löcher, desto weniger Käse.
Ergo: Je mehr Käse, desto weniger Käse.