Hochstellung und Tiefstellung von Zeichen

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

  • Du kannst dir doch eine Funktion machen, die mit draw_text_transform funktioniert
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Ich weiß nicht wirklich wie mir ­draw_text_transform helfen soll da mein ­string automatisch nach einer festgelegten Länge einen Zeilen Umbruch hat und mehrere hoch und tief gestellte Zeichen benötigt.

    Als hoch und tief gestellte Zeichen benötige ich alle Zahlen und das komplette Alphabet.
    Meine Webseite: jesoftmedia.de
  • Wenn du alle Zahlen und Buchstaben brauchst, würde ich schon die Skript Variante vorschlagen.
    Da du dich als Anfänger markiert hast kann ich deine Nachfrage nachvollziehen. ^^

    Du müsstest ein Skript schreiben, dass gewisse Zeichen gesondert zeichnet. Sprich: Du läufst durch den Text der geschrieben werden soll, etwa:

    "Hallo, ich bin ein Text mit einer hochgestellten \2 Zahl."
    Hier hast aber das Symbol das hochgestellt werden soll markiert durch einen Backslash. Du musst halt irgend eine Zeichenfolge dafür reservieren. Du kannst auch "[2]", ":2" oder was auch immer aussuchen...
    Das Ergebnis dass du erwartest sollte ja etwa so aussehen:
    "Hallo, ich bin ein Text mit einer hochgestellten ² Zahl."
    Du läufst also per Schleife durch den Text und wenn du auf dein "Escape" Symbol triffst, speicherst du dir die Position (string_width(str) ... usw.) und das Symbol das hoch/tief gestellt werden soll (etwa in eine Liste).
    Das Escape Symbol und das Symbol selbst ersetzt du im original Text dann durch ein Leerzeichen.
    Schließlich arbeitest du deine Liste ab und zeichnest die gemerkten Symbole kleiner skaliert an die gemerkten Stellen.

    Genau sowas habe ich erst vor einem Monat implementiert mit verlinkten Zitaten. Hier habe ich etwas der Form gehabt:
    "Hallo ich bin ein Text mit Link[gm-d.de/wbb/index.php/Thread/2…-Tiefstellung-von-Zeichen] den man anklicken kann."
    Und dieser Link wurde dann als ein kleines hochgestelltes Bild angezeigt, welches man anklicken konnte. (Hab den Code gerade nicht in der Nähe.)
  • Das war nur ganz klein, nicht besonders schwer.
    Hatte es gestern schon fertig, bin nachher aber nicht mehr zu gekommen es hochzuladen. Hier ist mein Script:
    Dateien
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Der Code erstellt am ende des Textes ein Hoch oder tief gestelltes Zeichen da ich aber verschiedene Zeichen mehrfach im Text habe hilft mir der Code mir im jetzigen Zustand nur etwas weiter.

    Die Idee ist jetzt wie BadToxic auch schon geschrieben hat im Text string alle Zeichen die hoch oder runter gestellt werden sollen zu markieren Z.B. H+ Text +H für hoch und H- Text -H für runter.
    Meine Webseite: jesoftmedia.de
  • GML-Quellcode

    1. text= argument0;
    2. ii = 0;
    3. ii2 = 0;
    4. tt = 0;
    5. for (i = 0; i < string_length (text); i+=1)
    6. {
    7. if (string_copy (text,i,2)=="H+")
    8. {
    9. pos[ii] = i;
    10. ii += 1;
    11. };
    12. };
    13. for (i2 = 0; i2 < string_length (text); i2+=1)
    14. {
    15. if (string_copy (text,i2,2)=="+H")
    16. {
    17. pos2[ii2] = i2;
    18. ii2 += 1;
    19. };
    20. };
    21. for (i3 = 0; i3 < ii; i3+=1)
    22. {
    23. global.einzel_string[tt] = string_copy(argument0, pos[tt]+3, (pos2[tt]-4) - pos[tt]);
    24. tt += 1;
    25. };
    Alles anzeigen


    Jetzt werden alle Zeichen, die hochgestellt werden sollen in einem Array gespeichert. Nun ist die Frage wie ich den neuen string zusammensetze?
    Meine Webseite: jesoftmedia.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Max77771 ()

  • GML-Quellcode

    1. text= argument0;
    2. ii = 0;
    3. ii2 = 0;
    4. tt = 0;
    5. spezial = 0;
    6. //Hochstellung und Tiefstellung H+ und H- Anfang
    7. for (i = 0; i < string_length (text); i+=1)
    8. {
    9. if (string_copy (text,i,2)=="H+")
    10. {
    11. pos[ii] = i;
    12. runter[ii] =0;
    13. ii += 1;
    14. spezial = 1;
    15. }
    16. else
    17. {
    18. if (string_copy (text,i,2)=="H-")
    19. {
    20. pos[ii] = i;
    21. runter[ii] =1;
    22. ii += 1;
    23. spezial = 1;
    24. };
    25. };
    26. };
    27. //Hochstellung und Tiefstellung +H und -H Ende
    28. for (i2 = 0; i2 < string_length (text); i2+=1)
    29. {
    30. if (string_copy (text,i2,2)=="+H")
    31. {
    32. pos2[ii2] = i2;
    33. ii2 += 1;
    34. spezial = 1;
    35. }
    36. else
    37. {
    38. if (string_copy (text,i2,2)=="-H")
    39. {
    40. pos2[ii2] = i2;
    41. ii2 += 1;
    42. spezial = 1;
    43. };
    44. };
    45. };
    46. //Speichern der einzelnen Hochgestellten/Tiefgestellten wörter
    47. for (i5 = 0; i5 < ii; i5+=1)
    48. {
    49. einzel_string[tt] = string_copy(argument0, pos[tt]+3, (pos2[tt]-4) - pos[tt]);
    50. tt += 1;
    51. };
    52. if (spezial = 1)
    53. {
    54. length = ii+1;
    55. tt = 0;
    56. x_neu = 0;
    57. for(i6 = 0; i6 < length; i6 += 1)
    58. {
    59. //Vor dem Ersten H+ oder H-
    60. if (i6 = 0)
    61. {
    62. draw_text(argument1,argument2,string_copy(argument0,1,pos[i6]-1));
    63. x_neu=string_width(string_copy(argument0,1,pos[i6]-2));
    64. };
    65. //Hochstellung und Runterstellung der wörter
    66. if (i6 > 0)
    67. {
    68. if (runter[tt] = 0)
    69. {
    70. draw_set_font(font_sehr_klein);
    71. draw_text_transformed(argument1+x_neu,argument2-2,einzel_string[tt],1,1,0);
    72. x_neu +=string_width(einzel_string[tt])+string_width(" ");
    73. tt += 1;
    74. draw_set_font(font_klein);
    75. }
    76. else
    77. if (runter[tt] = 1)
    78. {
    79. draw_set_font(font_sehr_klein);
    80. draw_text_transformed(argument1+x_neu,argument2+14,einzel_string[tt],1,1,0);
    81. x_neu +=string_width(einzel_string[tt])+string_width(" ");
    82. tt += 1;
    83. draw_set_font(font_klein);
    84. };
    85. };
    86. //Mittelteil
    87. if ((i6 > 0) and (i6 < length-1))
    88. {
    89. draw_text(argument1+x_neu,argument2,string_copy(argument0,pos2[i6-1]+3,(pos[i6]-1 - pos2[i6-1])-3));
    90. x_neu +=string_width(string_copy(argument0,pos2[i6-1]+3,(pos[i6]-1 - pos2[i6-1])-3));
    91. };
    92. //Nach dem letzdem +H oder -H
    93. if (i6 = length-1)
    94. {
    95. draw_text(argument1+x_neu,argument2,string_copy(argument0,pos2[i6-1]+3,i));
    96. };
    97. };
    98. }
    99. else
    100. {
    101. draw_text_ext(argument1,argument2,text,-1,420)
    102. };
    Alles anzeigen


    Die Hoch- und Runterstellung funktioniert nun allerdings bleibt jetzt das Problem mit den automatischen Zeilen Umbrüchen. Bisher habe ich die funktion draw_text_ext(x,y,string,sep,w) genutzt.

    Im Anhang ein Beispiel.

    Der schwarze Text (obj_text_mit) wird mit Hoch- und Tiefgestelltenzeichen dargestellt. Es wurde manuell das Zeichen # eingefügt um einen Zeilenumbruch auszuführen. Der Zeilenumbruch soll eigentlich automatisch passieren und der Text soll dann auch ganz links wieder beginnen wie im roten Beispiel ohne Hoch- und Tiefgestelltenzeichen.
    Dateien
    • Beispiel.zip

      (218,96 kB, 381 mal heruntergeladen, zuletzt: )
    Meine Webseite: jesoftmedia.de
  • Ich habe eine Idee aber auch dafür benötige ich Hilfe.

    GML-Quellcode

    1. for (i = 0; i < string_length (text[1]); i+=1)
    2. {
    3. if (string_copy (text[1],i,2)=="H+")
    4. {
    5. pos[ii] = i;
    6. runter[ii] =0;
    7. ii += 1;
    8. spezial = 1;
    9. }
    10. else
    11. {
    12. if (string_copy (text[1],i,2)=="H-")
    13. {
    14. pos[ii] = i;
    15. runter[ii] =1;
    16. ii += 1;
    17. spezial = 1;
    18. };
    19. };
    20. };
    Alles anzeigen


    Wenn die for Schleife einmal durchgelaufen ist, soll der string "text[1]" mit string "text[2]" ersetzt werden, und die Schleife erneut durchlaufen. Wie stelle ich das an?
    Meine Webseite: jesoftmedia.de