Frage zur Tacho verbesserung

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
  • Hallöschen,


    Ich hab endlich mein Tacho hinbekommen ( :) )
    allerdings springt das Tacho noch sehr...


    anfangs war es so, das der Timer zu langsam lief.
    Jetzt habe ich ihn auf 100 gestellt.
    Jetzt springt das Tacho von 30 Km/h auf 140 Km/h und plötzlich wieder auf 6 Km/h.
    So wirklich super ist das nicht :|


    kann mir jemand helfen wie ich das verbessern kann?


    public UpdateTacho()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && !IsPlayerNPC(i) && !IstEinKeinTachoFahrzeug(GetPlayerVehicleID(i)))
    {
    new Float:Strecke, Float:Geschwindigkeit;
    GetVehiclePos(GetPlayerVehicleID(i),X1[i],Y1[i],Z1[i]);
    Strecke = floatsqroot(floatpower(floatabs(floatsub(X1[i], X2[i])), 2)+floatpower(floatabs(floatsub(Y1[i], Y2[i])), 2)+floatpower(floatabs(floatsub(Z1[i], Z2[i])), 2));
    Geschwindigkeit = (Strecke / (TACHOTIMER/100)) * 3.6 ; //Tachotimer läuft auf 100 millisekunden)
    new Tachostring[20];
    format(Tachostring, sizeof(Tachostring), "%d Km/h", floatround(Geschwindigkeit));
    TextDrawSetString(Tacho[i], Tachostring);
    GetVehiclePos(GetPlayerVehicleID(i),X2[i],Y2[i],Z2[i]);
    TextDrawShowForPlayer(i, Tacho[i]);
    }
    else
    {
    TextDrawHideForPlayer(i,Tacho[i]);
    }
    }
    return 1;


    }


  • Hi


    Ich sehe gerade, dass das der Tacho aus meinem Tutorial ist.
    Du hast einen Fehler gemacht, ob es jetzt daran liegt, weiß ich nicht genau.


    Geschwindigkeit = (Strecke / (TACHOTIMER/100)) * 3.6 ;


    Der Sinn des defines "TACHOTIMER" ist, dass man dort die Wiederholrate des Tacho´s definiert. Vorher wurde durch 1000 gerechnet, und nicht wie bei dir durch 100. Änder das bitte wieder in 1000. Es wird deswegen durch 1000 gerechnet, damit man bei änderung des Timer-Intervalls trotzdem die gleiche Geschwindigkeit errechnet. Normalerweise halbiert sich die Geschwindigkeit, wenn der Timer doppelt so schnell taktet.


    Beispiel:
    TACHOTIMER = 1000 (Timer-Intervall)
    Gefahrene Strecke in den 1000 millisekunden = 20 Meter
    Strecke / (TACHOTIMER/1000) = 20 / (1000 / 1000) = 20


    Soll sich der Timer jetzt doppelt so schnell aktualisieren, gibst du bei TACHOTIMER logischerweise 500 vor (= 0,5 Sekunden).
    Logischerweise halbiert sich nun die Gefahrene strecke in dem Intervall, also 10 Meter
    Strecke / (TACHOTIMER/1000) = 10 / (500 / 1000) = 20 (Wie du sieht ebenfalls 20, so solls auch sein!


    Also, einfach durch 1000 rechnen und zum ändern des Timer-Intervalls nur den define TACHOTIMER ändern!!!


    Welchen Wert hast du denn im moment bei TACHOTIMER stehen, und nimmst du auch diesen define für den Timer?


    Ich hoff ich habs verstädlich gemacht, warum da bewusst /1000 steht.


    MFG, Robdeflop®