Geschwindigkeit Berechnung

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
  • Hi Leutz,


    weiß einer wie die rechnung zum herrausfinden von km/h ist? ich würd nähmlich gerne verstehen, was ich als fs auf meinem server habe ^^


    wäre cool wenn jemand ne erklärung für mich hat.


    MfG
    Psycho

  • Geschwindigkeit = Distanz / Zeit
    Distanz = Zeit / Geschwindigkeit
    Zeit = Distanz / Geschwindigkeit


    Darauf bauen ALLE Speedometer auf.


    Wenn du wissen willst wie schnell jemand ist musst du die Position des Spielers speichern und 1 Sekunde danach die neue Position abfragen. Anschließend musst du die Distanz zwischen den beiden Punkten berechnen. Dann nurnoch Distanz / 1 und schon hast du die Geschwindigkeit in Meter/Sekunde.


    3,6 m/s = 1 km/h. (Wenn ich mich richtig an den Physikunterricht vor paar Jahren erinnere ^^).

  • alle speedos benutzen ja so ziehmlich alle funktionen aus float.inc kann mir mal einer sagen was die machen? was die bedeuten? was ich einfügen muss?


    float()
    floatstr()
    floatmul()
    floatdiv()
    floatadd()
    floatsub()
    floatfract()
    floatround()
    floatcmp()
    floatsqroot()
    floatpower()
    floatlog()
    floatcos()
    floattan()
    floatabs()


    Wäre Cool


    MfG
    Psycho

  • alles was du brauchst ist floatsqrt um die wurzel beim pythagoras zu ziehen.(reicht übrigens wenn du den in 2 dimensionen ausrechnest, das spart rechenzeit. ist nur etwas ungenau wenn du bergauf/ab fährst. wenns ganz genau sein soll musst du sowieso im abstand von höchstens 100millisekunden berechnen und nicht jede sekunde.)


    den rest kannst du mit normalen rechenoperatoren schreiben.

    Mein erstes eigenes Spiel


    meine Tutorials:
    Nachos Torsystem


    scripten ist kein spiel, es ist arbeit(die sehr viel spass machen kann).
    gewöhn dich an den gedanken arbeiten zu müssen oder lass es sein.

    Einmal editiert, zuletzt von NachoMan ()

  • STIMMT SATZ DES PYTHAGORAS warum komm ich net drauf *stirnklatsch* was is floatsqrt? und wie bekomm ich den float auf ne normale zahl? vllt floatround oder?

  • Ich nutze immer den Wert 3.4 ...
    Denn 3.6 finde ich unpassend, da man schon beim anfahren 80 km/h hat und ich Blitzer verteilt habe.
    Aber das ist dann wohl Geschmackssache ^^

  • Vielleicht sind es 1 Yard :)


    So dass der Wert 3,4 sogar Sinn macht!

  • Dein Honda NSX ist leider nur gemoddet. in san andreas gibts keine original marken

  • Ich hab nicht gesagt das ich einen drinne habe, ich habe nur einen Vergleich aufgestellt , für die Leute die evntl. auf einen Reales Geschwindigkeitsverhältnis setzen , 2. kann man den Berechnungswert immer durch eine Spieler Variable ändern und so für jedes Auto ein ganz eigenes Geschwindigkeitsverhältnis erstellen , tipps sind ja wohl erlaubt ^^

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • ...
    new Float:vPos2[3];
    vPos2[0] = (vPos1[vehicleid][0] - vPos2[0]);
    vPos2[1] = (vPos1[vehicleid][1] - vPos2[1]);
    vPos2[2] = (vPos1[vehicleid][2] - vPos2[2]);


    vPos2[0] = (vPos2[0] * vPos2[0]);
    vPos2[1] = (vPos2[1] * vPos2[1]);
    vPos2[2] = (vPos2[2] * vPos2[2]);


    new Float:xXx;
    xXx = (vPos2[0] + vPos2[1]);
    xXx = (xXx + vPos2[2]);
    xXx = (xXx * 2);


    new Distanz;
    Distanz = floatround(xXx, floatround_floor);
    vSpeed[vehicleid] = Distanz;
    ...


    Warum bekomm ich keine richtige Zahl hin? es heist immer 0 selbst wenn ich Float:vSpeed habe und dann beim tacho %f ausgebe kommt 0.0000. wie kommt das?

  • #include <a_samp>


    forward SpeedCheck();
    forward PnP_OnGameModeInit();
    forward PnP_OnPlayerStateChange(playerid,newstate,oldstate);


    #define MAX_CHECKS 3
    #define SPEED_2D


    new Float:LastPos[MAX_PLAYERS][3];
    new PlayerSpeed[MAX_PLAYERS][MAX_CHECKS];
    new PlayerTime[MAX_PLAYERS];
    new Checks[MAX_PLAYERS];
    new StateDriver[MAX_PLAYERS];


    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    StateDriver[playerid]=(newstate==PLAYER_STATE_DRIVER);
    return PnP_OnPlayerStateChange(playerid,newstate,oldstate);
    }


    public OnGameModeInit()
    {
    SetTimer("SpeedCheck",250,true);
    return PnP_OnGameModeInit();
    }


    public SpeedCheck()
    {
    new Float:pos[3];
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerPos(i,pos[0],pos[1],pos[2]))
    {
    if(StateDriver[i])
    {
    Checks[i]++;
    if(Checks[i]==MAX_CHECKS)
    Checks[i]=0;
    #if defined SPEED_2D
    PlayerSpeed[i][Checks[i]]=floatround(floatsqroot((LastPos[i][0]-pos[0])*(LastPos[i][0]-pos[0])+(LastPos[i][1]-pos[1])*(LastPos[i][1]-pos[1]))/float(GetTickCount()-PlayerTime[i])*3600);
    #else
    PlayerSpeed[i][Checks[i]]=floatround(floatsqroot((LastPos[i][0]-pos[0])*(LastPos[i][0]-pos[0])+(LastPos[i][1]-pos[1])*(LastPos[i][1]-pos[1])+(LastPos[i][2]-pos[2])*(LastPos[i][2]-pos[2]))/float(GetTickCount()-PlayerTime[i])*3600);
    #endif
    }
    else
    {
    for(new j=0;j<MAX_CHECKS;j++)
    PlayerSpeed[i][j]=0;
    Checks[i]=0;
    }
    PlayerTime[i]=GetTickCount();
    LastPos[i]=pos;
    }
    }
    return 1;
    }


    stock GetPlayerSpeed(playerid,mph=false)
    {
    new v;
    for(new i=0;i<MAX_CHECKS;i++)
    v+=PlayerSpeed[playerid][i];
    v/=MAX_CHECKS;
    if(mph)
    v=floatround(v/(1.61));
    return v;
    }


    #define OnGameModeInit PnP_OnGameModeInit
    #define OnPlayerStateChange PnP_OnPlayerStateChange


    Mein GetPlayerSpeed-Include.

  • sry aba wenns dir nix aus macht würde ich gerne selbst machen ^^


    also warum bekomm ich hier keine wirkliche zahl raus?


    ...
    new Float:vPos2[3];
    vPos2[0] = (vPos1[vehicleid][0] - vPos2[0]);
    vPos2[1] = (vPos1[vehicleid][1] - vPos2[1]);
    vPos2[2] = (vPos1[vehicleid][2] - vPos2[2]);


    vPos2[0] = (vPos2[0] * vPos2[0]);
    vPos2[1] = (vPos2[1] * vPos2[1]);
    vPos2[2] = (vPos2[2] * vPos2[2]);


    new Float:xXx;
    xXx = (vPos2[0] + vPos2[1]);
    xXx = (xXx + vPos2[2]);
    xXx = (xXx * 2);


    new Distanz;
    Distanz = floatround(xXx, floatround_floor);
    vSpeed[vehicleid] = Distanz;
    ...


    Ne Antwort wäre cool

  • frage die position des spielers und nicht die des fahrzeugs ab, das macht es etwas einfacher.


    vPos2[0] = (vPos2[0] * vPos2[0]);


    kann man auch so schreiben


    vPos2[0] * = vPos2[0]);


    die formel sollte so aussehen:


    distanz = floatround(floatsqrt((vPos2[0] * vPos2[0]) + (vPos2[1] * vPos2[1])), floatround_floor);


    die variable distanz ist doch auch überflüssig....
    naja ich hoffe das hat dir ein bisschen geholfen

    Mein erstes eigenes Spiel


    meine Tutorials:
    Nachos Torsystem


    scripten ist kein spiel, es ist arbeit(die sehr viel spass machen kann).
    gewöhn dich an den gedanken arbeiten zu müssen oder lass es sein.

    Einmal editiert, zuletzt von NachoMan ()