Hallo,
Ich habe ein Textdraw, dass in einem Timer immer wieder neu erstellt wird(anders gehts nicht, da die position verändert werden muss). Nun ist das Problem, dass immer wenn ich einen Befehl eingebe solange sich das Textdraw bewegt, ändert sich der Text vom Textdraw. Ich glaube es liegt daran, dass ich das Textdraw immer wieder neu erstell aber anders gehts ja nicht habt ihr ne Idee?
Texdraw string ändert sich
- Haxler
- Geschlossen
- Erledigt
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
-
-
wie meinste das? soll der Textdraw sich immer ändern von der Position her oder nur der Text?
so ist für Text ändern
TextDrawHideForPlayer(playerid,TextDrawName);
TextDrawSetString(TextDrawName,"Bla bla bla");
TextDrawShowForPlayer(playerid,TextDrawName); -
Also ich versteh dich, am besten lässt du einen globalen String erstellen wie zB.:
new gTextdrawString[256];
und erstellt den Textdraw mit dem String wie:
TextDrawCreate(X, Y, gTextdrawString);
und ändern tust du es halt dann mit
format(gTextdrawString, sizeof(gTextdrawString), "Blah Blah");
-
@ [GwR]HEiTZER:
Ich muss das Textdraw immer wieder neu erstellen weil ich nur die Koordinaten ändern will.
Templer:
hm so klappts auch nicht. Sobald ich einen Befehl eingeb, wird der String geändert...noch wer ne idee?
Edit:
Mir ist gerade aufgefallen, das dieser Fehler fast nur bei Befehlen auftritt, die nicht existieren!
-
zeig doch mal die funktion, mit der du das textdraw zerstörst und wieder erstellst.
-
public MoveLineText(playerid,tcaption[],anzahl)
{
if(lineanzahl >= anzahl)
{
ttext = 148.000000;
KillTimer(linetimer);
linerun = false;
lineanzahl=0;
}
if(ttext >= 640.000000) // ttext ist ein Float^^
{
ttext = 148.000000;
lineanzahl++;
}
format(linestring,sizeof(linestring),"%s",tcaption); // wenn ich tcaption direkt verwende crasht der server
TextDrawHideForAll(linetext);
TextDrawDestroy(linetext);
ttext+=1;
linetext = TextDrawCreate(ttext,431.000000,linestring);
TextDrawAlignment(linetext,0);
TextDrawBackgroundColor(linetext,0x000000ff);
TextDrawFont(linetext,3);
TextDrawLetterSize(linetext,0.399999,1.600000);
TextDrawColor(linetext,0xffffffff);
TextDrawSetOutline(linetext,1);
TextDrawSetProportional(linetext,1);
TextDrawSetShadow(linetext,1);
TextDrawShowForAll(linetext);
return 1;
} -
wird die funktion ausschließlich vom timer aufgerufen oder noch woanders im script?
-
Nein nur von einem Timer.
Weiß echt nichtmehr weiter Und alle Befehle blocken solange die Funtkion aufgerufen wird ist ja auch doof -
zeig mal die zeile, in der du den timer startest.
-
linetimer = SetTimerEx("MoveLineText",30,1,"dsd",playerid,text,anzahl);
danke dass du mir versuchst zu helfen -
30 ms ist ein extrem niedriges intervall, sehr ressuorcenlastig, nimm mal 1000 ms oder so.
in welchem callback startest du den timer? -
Es geht ja darum, dass sich das Textdraw bewegt. Damit es sich flüssig bewegt muss der Interval so niedrig sein :).
Der Timer wird in einem Befehl gestartet(mit OCMD gescriptet! könnte das was damit zu tun haben?) -
zeig mal den command
-
ocmd:movetext(playerid,params[])
{
if(PlayerInfo[playerid][admin] < d_movetext)return SendClientMessage(playerid,rot,"Du bist kein Admin oder hast nicht die nötigen Rechte!");
new dtext[256],anzl;
if(sscanf(params, "ds",anzahl,text))return SendClientMessage(playerid,rot,"Verwendung: /movetext [durchläufe][textäufe]");
if(linerun == true)return 0;
KillTimer(linetimer);
ttext = 148.000000;
linetimer = SetTimerEx("MoveLineText",30,1,"dsd",playerid,dtext,anzl);
linerun = true;
return 1;
}Edit: So habs jetzt geschafft. Hatte unter OnPlayerCommandText ne Abfrage die den Fehler i-wie verursacht hat. Jetzt schon ein neues Problem: Sobald ein Spieler auf den Server kommt crasht dieser solange der Text läuft...
-
breadfish.de
Hat das Thema geschlossen.