Ab bestimmter Zeile den Text ausschneiden

  • Ab bestimmter Zeile den Text ausschneiden

    Hallo,
    ich wollte mir ein Script schreiben, mit dem ich leicht Texte in einem RPG in mehrere Teile aufteile,
    und der nächste Teil dann zB mit Enter gezeigt wird.
    Ich meine das so: wenn ich einen Text habe, der zB 4 Zeilen lang ist (durch draw_text_ext) mein "Chatboxsprite" aber nur 3 Zeilen groß ist, wird ja die unterste Zeile abgeschnitten, da sie aus dem Bildschirm rausgeht.
    Mithilfe von einigen stringfunktionen kann ich ja diesen Text dann abspeichern (zB mit string_copy)
    Aber wie kann ich denn jetzt abfragen, ab welchem Zeichen die 4. Zeile erreicht ist?
  • Du könntest den String durchgehen und immer die Höhe prüfen.
    So in etwa:

    GML-Quellcode

    1. var i, ds;
    2. ds = ds_list_create();
    3. str = argument0;
    4. i = 0;
    5. while (i < string_length(str)) {
    6. s = string_copy(str,1,i);
    7. if (string_height_ext(s,-1,argument1) > 50) {
    8. ds_list_add(ds,s);
    9. str = string_delete(str,1,i);
    10. i = 0;
    11. }
    12. i += 1;
    13. }
    14. if (str != "")
    15. ds_list_add(ds,s);
    16. return ds;
    Alles anzeigen


    Schreibe den Code in ein Script und übergib als argument0 deinen Text und als argument1 die Breite auf die der Text gezeichnet werden soll.
    Zurückgegeben wird die id der List, in der die einzelnen "Seiten" gespeichert sind.
    Hab den Code jetzt nicht getestet.

    EDIT: Fehler ausgebessert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • Hab jetzt das Script nochmal ausgebessert und auch getestet:

    GML-Quellcode

    1. var i, ds;
    2. ds = ds_list_create();
    3. str = argument0;
    4. i = 1;
    5. while (i <= string_length(str)) {
    6. if (string_height_ext(string_copy(str,1,i),-1,argument1) > 50) {
    7. ds_list_add(ds,string_copy(str,1,i-1));
    8. str = string_delete(str,1,i-1);
    9. i = 0;
    10. }
    11. i += 1;
    12. }
    13. if (str != "")
    14. ds_list_add(ds,str);
    15. return ds;
    Alles anzeigen
  • Ok, soweit klappt es schonmal, aber was muss ich verändern damit mehrere Zeilen eine Seite ergeben? (bis jetzt ist ja ein Listeneintrag=eine Zeile) Und wie kann man verhindern das die Wörter getrennt werden?
  • Die "> 50" im Script gibt an wie viele Pixel hoch der Text maximal sein darf. Du musst also je nach Schriftart und -größe eine größere Zahl wählen.
    Wie meinst du "Wörter getrennt werden"? Die Wörter werden nur an Leerzeichen und Bindestrichen getrennt. Das kann man auch nicht verändern.
  • Benutzer online 1

    1 Besucher