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?
.
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?
.
Meine Frage ist nun, kann man abfragen wie lang der string ist und kann man dann daruch die Länge der Box anpassen?
Ja kann man...die Funktion strlen sollte dir bekannt sein
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
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 ?
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:
stock CountPixelsInName(Zname[])
{
new pixels;
for(new i=0; i<strlen(Zname); i++)
{
switch(Zname)
{
case 'A': pixels+=8;
case 'a': pixels+=6;
case 'B': pixels+=7;
case 'b': pixels+=6;
case 'C': pixels+=8;
case 'c': pixels+=6;
case 'D': pixels+=7;
case 'd': pixels+=6;
//usw....
// .....
case 'Y': pixels+=9;
case 'y': pixels+=7;
case 'Z': pixels+=7;
case 'z': pixels+=5;
}
}
return pixels;
}
Alles anzeigen
Public:
public Zones_Update()
{
new zone[MAX_ZONE_NAME], string[30];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(isAFK[i]!=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]);
PlayerTextDrawHide(i,MapName1[i]);
PlayerTextDrawTextSize(i,MapName1[i], CountPixelsInName(zone)+10, 3.0);
return PlayerTextDrawShow(i,MapName1[i]);
}
return 1;
}
Alles anzeigen
Leider bekomme ich im CountPixelsInName folgenden Error:
Erster Quellencode Zeile (6 (switch(Zname) ) : error 033: array must be indexed (variable "-unknown-")
MfG
switch(Zname)
zu:
switch(Zname[i])
Der kaputte Style hat das entfernt.
Vielen Dank
Es klappt jetzt alles