Textdraw Box & String Frage

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Brotfische,


    Ich habe auf meinem Server ein Textdraw mit einer Box das den Zonenname wo man sich befindet angezeigt wird.



    Meine Frage ist nun, kann man abfragen wie lang der string ist und kann man dann daruch die Länge der Box anpassen?



    .


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ja kann man...die Funktion strlen sollte dir bekannt sein :)


    Ja, aber ich komm mit der Funktion noch nicht ganz klar :)


    Code:


    public Zones_Update()
    {
    new zone[MAX_ZONE_NAME], string[30];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(sInfo[i][tutpart]>0)return 1;
    if(sInfo[i][eingeloggt]!=1)return 1;
    GetPlayer2DZone(i, zone, MAX_ZONE_NAME);
    format(string,sizeof(string),"%s", zone);
    PlayerTextDrawSetString(i,MapName2[i],string);
    PlayerTextDrawShow(i,MapName2[i]); //Text (Zonenmen)
    PlayerTextDrawShow(i,MapName1[i]); //Textdrawbox
    }
    return 1;
    }


    Wie mach ich das jetzt am besten?


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • strlen ist hier unpassend. Nicht jeder Buchstabe ist gleich groß, somit kannst du das nicht gescheit berechnen.


    Ich habe das bei mir mal für die Dialoge gemacht, dass die Tabs dynamisch korrekt gesetzt werden.
    Du musst in der Schriftart die der Text hat alle Buchstaben auf ihre Pixelgröße prüfen, sprich zu machst ein Bild von einem "AaBbCcDd...XxYyZz" String und zählst für jeden Buchstabe die Pixel.


    Danach kannst du mit einer Schleife durch alle Buchstaben des Zonennamens die Pixellänge des Namens bestimmen und somit entsprechend die TextDrawTextSize anpassen.

  • strlen ist hier unpassend. Nicht jeder Buchstabe ist gleich groß, somit kannst du das nicht gescheit berechnen.


    Ich habe das bei mir mal für die Dialoge gemacht, dass die Tabs dynamisch korrekt gesetzt werden.
    Du musst in der Schriftart die der Text hat alle Buchstaben auf ihre Pixelgröße prüfen, sprich zu machst ein Bild von einem "AaBbCcDd...XxYyZz" String und zählst für jeden Buchstabe die Pixel.


    Danach kannst du mit einer Schleife durch alle Buchstaben des Zonennamens die Pixellänge des Namens bestimmen und somit entsprechend die TextDrawTextSize anpassen.


    Okay, da komme ich jetzt nicht so ganz mit, könnte mir das jemand etwas genauer erklären mit Codes ?


    Mit freundlichen Grüßen
    German_ScripterHD

  • stock CountPixelsInName(name[])
    {
    new pixels;
    for(new i=0; i<strlen(name); i++)
    {
    switch(name[i])
    {
    case 'A': pixels+=8;
    case 'a': pixels+=6;
    case '0': pixels+=6;
    }
    }
    return pixels;
    }


    Und dann eben:
    TextDrawTextSize(textdraw, CountPixelsInName(zonenname), 3.0);


    Den switch musst du eben auffüllen, mit allen Buchstaben/Zahlen/... die du verwendest.
    Mache einen Screenshot von den Buchstaben und zoome mit Gimp (z.B.) ganz nah hin, dann kannst du die Pixel zählen.
    Gegebenenfalls musst du noch ein paar Pixel am Ende hinzufügen, also:
    TextDrawTextSize(textdraw, CountPixelsInName(zonenname)+10, 3.0);

  • Den switch musst du eben auffüllen, mit allen Buchstaben/Zahlen/... die du verwendest.
    Mache einen Screenshot von den Buchstaben und zoome mit Gimp (z.B.) ganz nah hin, dann kannst du die Pixel zählen.
    Gegebenenfalls musst du noch ein paar Pixel am Ende hinzufügen, also:
    TextDrawTextSize(textdraw, CountPixelsInName(zonenname)+10, 3.0);

    Danke erstmal Jeffry :)


    Ich weiß das der Beitrag schon etwas älter ist, aber habe jetzt erst dafür Zeit gefunden...
    Ich habe es nun so gemacht:


    Stock:



    Public:



    Leider bekomme ich im CountPixelsInName folgenden Error:
    Erster Quellencode Zeile (6 (switch(Zname) ) : error 033: array must be indexed (variable "-unknown-")


    MfG :thumbup:
    :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD