Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Game Maker Domäne. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Rodrog

Hunger

  • »Rodrog« ist der Autor dieses Themas

Beiträge: 567

Game Maker Version: 8 Pro

Selbsteinschätzung: GML Fortgeschrittener

  • YoYo Games Profil
  • Private Nachricht senden

1

Dienstag, 6. März 2012, 19:55

Text einfärben

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 Spoiler


GML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**************************************************************************************************************************/
// 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)

  Spoiler Spoiler

GML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**************************************************************************************************************************/
// 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:

GML

1
draw_my_text(x,y,"Hallo! <!c_255000000!>Dieser Text wird rot gezeichnet, <!c_00025500!>und dieser jetzt grün.#<!c_normal"!>Normale farbe.");


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
»Rodrog« hat folgende Datei angehängt:
  • beispiel.rar (10,9 kB - 19 mal heruntergeladen - zuletzt: 12. April 2014, 14:24)
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.

Ähnliche Themen

Verwendete Tags

draw_text, Farben, Text