Messagebox

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

  • hallo

    ich weiß es gibt ein paar tutorials für message boxen (wie das von shaun oder heartbeast )ünd diese hab ich mir auch schon angesehen jedoch will ich nur eine einfache
    box wo die schrift erkennt wo das ende der box ist.sodass sie eine zeile weiter ünten weitergeht.ünd was sie nicht über die höhe der box geht(aber keine schreibmaschinen text also wo jeder büchstabe nach einander kommt.)


    will nür verstehn wie ich das machen mit mit string_width ünd all den anderen fünktionen.

    wäre toll wenn ihr mir ein einfaches beispiel zeigen könntet oder mir erklärt wie ich es machen kann thx
  • Du benutzt am besten eine Schleife, mit der du vom Anfang bis Ende über string_copy den Text anschaust und dann schaust, ob der Text so breit idt, dass eine neue Zeile eingefügt werden kann ('#'). Natürlich kann man diese Denkweise etwas optimieren, damit es schneller läuft. :)
    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
  • danke dir echt toll.
    müss jetzt nür noch string_copy verstehn lol....werd es mir mal gleich ansehen

    kann ich es nicht irgendwie so machen das ich eine abfrage mache

    GML-Quellcode

    1. if (string_width(str)> messagboxwidth)
    2. {
    3. //zeilenümbrüch erstellen..aber wie??? normal benütz man # dafür aber ich kann nicht einfach nür # schreiben
    4. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()

  • Ja die Abfrage ist so richtig. Str bekommst hier von string_copy

    Du musst im Text eine Raute/Hashtag einfügen. Dann erzeugt gm einen Umbruch.
    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
  • danke aber das problem ist ich weiß nicht wie ich das mit dem zeilenümbrüch in der if abfrage schreiben soll.....

    EDIT: aha vl so:

    GML-Quellcode

    1. if (string_width(str)> messagboxwidth)
    2. {
    3. string_copy(str,20,last) // aber da müss ich ja jeden büchstaben zählen damit ich weiß wo er den zeilenümbrüch machen soll.
    4. string_insert("#",str,0);
    5. }



    ich will das er aütomatisch erkennt das er dort einen zeilenümbrüch machen soll.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()

  • Mir ist gerade eine etwas leichtere und bessere Lösung eingefallen:
    Du hast eine Variable ('width'), um die Breite des Textes in der Schleife festzuhalten.
    In einer For-Schleife gehst du alle Zeichen durch und addierst die width immer mit der Breite von dem einen Zeichen. Ist die width größer als deine maximale Breite, mache einen Zeilenumbruch vor dem letzen Zeichen (damit die max. Breite nicht überschritten wird) und setze width auf die Breite vom aktuellen Zeichen:

    GML-Quellcode

    1. var width = 0; //Breite im Verlauf
    2. var w; //temporäre Variable
    3. for(var i=0; i<string_length(str); i++){ //gehe mit Schleife durch alle Zeichen
    4. w = string_width(string_char_at(str, i)); //setze die "temporäre" Variable auf die Breite des aktuellen Zeichens
    5. width += w; //addiere zur gesamte Breite, der aktuellen Zeile, die Breite des ZE
    6. if(width > maximaleBreite){ //Breite überschritten?
    7. string_insert('#' ,str, i); //setze vor diesem Zeichen ein Zeilenumbruch
    8. width = w; //setze die Breite der nächsten Zeile auf diesem einen Zeichen.
    9. }
    10. }
    11. //str bekam jetzt deine Zeilenumbrüche
    Alles anzeigen

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

    aber ich bin anscheinend nicht klug genug um es zu verstehn....
    bei ​string_width ist damit der ganze string gemeint oder nur ein buchstabe davon?
    bei ​string_length ist der ganze string gemeint oder?(also ein ganzer satz oder länger)
    und wieso setzt du width auf 0?

    ich habs versucht zu testen aber geht nicht.

    create event

    GML-Quellcode

    1. ​breite = 240;
    2. hoehe = 120;
    3. maximaleBreite = 230;
    4. str = "Hallo ich bin ein test,hoffe es gefällt dir.werde mich um dich sorgen...";


    GML-Quellcode

    1. ​draw_rectangle(x,y,x+breite,y+hoehe,false);
    2. var width = 0; //Breite im Verlauf
    3. var w; //temporäre Variable
    4. for(var i=0; i<string_length(str); i++){ //gehe mit Schleife durch alle Zeichen
    5. w = string_width(string_char_at(str, i)); //setze die "temporäre" Variable auf die Breite des aktuellen Zeichens
    6. width += w; //addiere zur gesamte Breite, der aktuellen Zeile, die Breite des ZE
    7. if(width > maximaleBreite){ //Breite überschritten?
    8. string_insert('#' ,str, i); //setze vor diesem Zeichen ein Zeilenumbruch
    9. width = w; //setze die Breite der nächsten Zeile auf diesem einen Zeichen.
    10. }
    11. }
    12. draw_text(x,y,str)
    Alles anzeigen


    aber es geht nicht
  • ich habs nicht hinbekommen


    was mach ich hier falsch?

    create event

    GML-Quellcode

    1. str = 0;
    2. text = "Das ist ein test lalalalas klsdjf ölaksdf lökelk öalkds ölkwe rölkjhdf ";



    step event

    GML-Quellcode

    1. if (str < string_length(text))
    2. {
    3. str+=1;
    4. }
    5. if (string_width(text) > width)
    6. {
    7. string_insert("#",text,str);
    8. }


    GML-Quellcode

    1. draw_text(x,y,string_copy(text,0,str))




    er macht einfach keinen zeilenümbrüch
  • Die Funktionen nehmen dein ganzen Text. string = Zeichenkette = plural.

    Ah kann gut sein, dass es sich aufgehangen. Hab eine Sache vergessen. Gib mal bei der Zeile mit insert das i ein -1 und eine Zeile dahinter i++.

    Dein Code klappt nicht, weil sich die Breite, die du ausrechnest immer gleich ist. Da müsstest du mit string_copy arbeiten.

    Tipp: Kannst du statt geht nicht sagen, was nicht geht und was geht? Dann ist es für uns einfacher den Fehler nachzuvollziehen.

    Konnt jetzt nicht so ausführlich antworten, weil ich grad am Handy bin.
    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
  • hy danke konnte leider keine andere antwort geben da ich bei deinem garnichts gesehn habe....
    aber werd es jetzt mal mit dem -1,i++ probieren...danke...

    ünd wegen dem von mir ich dachte die breite ist ja die breite der gedrawten box...ünd dachte wenn ich das so schreibe sollte er erkennen wann er diese breite erreicht..
    wie meinst dü das mit string copy
  • Dass du nichts siehst ist auch wichtig zu wissen.

    Du hast immer die selbe Breite bekommen, weil du auch immer den selben string angegeben hast. Mit string_copy kannst du von 1 bis zu deiner Position(in dem Fall str) den Text kopieren und diesen in der Funktion benutzen
    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
  • Hi acidrain833

    Hier habe ich ein fertiges Textbox - Programm für den GM 8.0. Vielleicht kann dir das Programm helfen bei deinen Problem. Die Scrips haben leider keine Kommentare , aber der Code ist leicht verständlich.
    Der Code stammt aus der Engine - Hello für Super Mario.

    Schöne Weihnachten noch
    Text-Box.zip


    Gruß Drachen
  • tüt mir leid ich komm einfach nicht dahinter.ich versteh das nicht..

    also nür züm verständniss:

    GML-Quellcode

    1. ​if (str < string_length(text))
    2. {
    3. str+=1;
    4. }



    dieser code bedeütet das str solange er kleiner ist als die länge der zeichenkette immer eins hinzü zählt bis das ende erreicht ist.

    ünd dieser:

    GML-Quellcode

    1. ​draw_text(x,y,string_copy(text,0,str))


    bedeütet das er den text drawen soll ünd ich weiß zwar was das string copy bewirkt aber wie es fünktioniert weiß ich nicht.
    ich denke es wird bei string copy züerst mal der string (text) dann die position( 0 ) wo es anfangen soll ünd dann wo es enden soll(str)...stimmt das???
    aber wieso macht er jetzt immer einzelne büchstaben??

    tüt mir leid ihr denkt eüch sicher das ich mich dümm anstelle.aber ich gebe mir mühe bin aber keine stüdent oder dergleichen ünd deshalb bräüche ich manchmal länger..


    @Drachen
    danke werd es mir mal ansehen
  • Du hast es ja schon richtig erfasst, string_copy gibt den text von position 0 bis str zurück, also immer nur einen teil.
    Und da str jeden step um eins vergrößert wird kommt jeden step ein weiterer buchstabe hinzu,
  • hy also ich hab gerade eine fünktion gesehen also draw_text_ext ünd da kann man einen line break bestimmen also einen zeilenümbrüch.... jühü

    es fünktioniert aber es sieht halt nicht so schön aüs weil die zeilen alle ünterschiedlich lang sind am ende.