Text einfärben

    • GM 8

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 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 anzeigen

      GML-Quellcode

      1. /**************************************************************************************************************************/
      2. // draw_my_text(x,y,str)
      3. // Erklärung:
      4. // Zeichnet einen Text an der Position x/y:
      5. // Sonderheit:
      6. // Es kann ein Schlüsselwort übergeben werden um den Text andersfabig zu zeichnen.
      7. // Beispiel:
      8. // draw_my_text(x,y,"<!c_255000000!>Auto");
      9. // //Alles nach diesem "Tag" wird rot gezeichnet
      10. //
      11. // draw_my_text(x,y,"<!c_normal!>Auto");
      12. // //Alles nach diesem "Tag" wird mit der eingestellten Farbe gezeichnet
      13. //
      14. /**************************************************************************************************************************/
      15. var pos_x,pos_y,text, i,j, line,buffer, tmpcolor;
      16. pos_x = argument0; //Sollte klar sein
      17. pos_y = argument1; //Sollte klar sein
      18. text = argument2; //Sollte auch klar sein
      19. tmpcolor = draw_get_color(); //Speichert die eingestellte Farbe um sie falls der normal-Tag aufgerufen wird zu zeichnen
      20. line = 0; //Wird benötigt um Zeilenbrüche zu zählen
      21. buffer = ""; //Wird benötigt um den Zeichenabstand berechnen zu können
      22. for(i=0;i<string_length(text)+1;i+=1) { //Ich gehe den ganzen Text durch um seine Zeichen zu prüfen
      23. if(string_string_at(text, "<!c_?????????!>",i)) { //Es wird überprüft ob der Text die Farbe wechseln wird
      24. color = string_copy(text, i+5, 9); //Hier wird die Farbkombination aus dem String "herausgefischt"
      25. 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
      26. text = string_delete(text,i+1,string_length("<!c_?????????!>")); //Der Farb-Tag wird gelöscht (damit er nicht geschrieben wird
      27. } else if ((string_string_at(text, "<!c_normal!>",i))) { //Es wird überprüft ob der Text die Farbe wechseln wird
      28. draw_set_color(tmpcolor); //Die Farbe wird auf die oben voreingestellte Farbe gewechselt
      29. text = string_delete(text,i+1,string_length("<!c_normal!>")); //Der Normal-Tag wird wieder gelöscht
      30. }
      31. if(string_char_at(text,i+1) == "#") { //Es wird überprüft ob ein Zeilenumbruch verlangt wird
      32. line += 1; //dann wird ein Zeilenumbruch hinzugefügt
      33. buffer = ""; //und der buffer auf 0 gesetzt
      34. } else {
      35. 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
      36. buffer += string_char_at(text,i+1); //Der Buffer wird um das gezeichnete Zeichern erhöht
      37. }
      38. }
      39. draw_set_color(tmpcolor); //Die alte Farbe wird wieder eingestellt, da die Funktion nicht mit anderen draw-Funktionen in Konflikt treffen sollte
      Alles anzeigen



      string_string_at ( (string) str, (string) substr, (real) pos)
      Spoiler anzeigen

      GML-Quellcode

      1. /**************************************************************************************************************************/
      2. // string_string_at(str, substr, pos)
      3. // Erklärung:
      4. // Es wird überprüft ob der substr an der Position pos vorkommt.
      5. // z.B.:
      6. // str = "Autobahn"
      7. // substr = "bahn"
      8. // pos = 5
      9. // => return true
      10. //
      11. // str = "Autobahn"
      12. // substr = "fahrt"
      13. // pos = 5
      14. // => return false
      15. //
      16. // str = "Autobahn"
      17. // substr = "b??n"
      18. // pos = 5
      19. // => return true
      20. //
      21. //
      22. // Ob ein Zeichen egal sein sollte kann mit einem Fragezeichen dargestellt werden (Siehe Beispiel 3) //
      23. /**************************************************************************************************************************/
      24. var str,substr, pos, i, correct;
      25. str = argument0;
      26. substr = argument1;
      27. pos = argument2;
      28. correct = true;
      29. for(i = pos; i < pos+string_length(substr) && correct == true;i+=1) {
      30. if(string_char_at(str,i+1) != string_char_at(substr, i-pos+1) && string_char_at(substr, i-pos+1) != "?") {
      31. correct = false;
      32. }
      33. }
      34. return correct;
      Alles anzeigen


      Der Aufruf der Funktion sieht folgendermaßen aus:

      GML-Quellcode

      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
      Dateien
      • beispiel.rar

        (10,9 kB, 404 mal heruntergeladen, zuletzt: )
      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.