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
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 ^^).
distanz / 1 = distanz
das ist überflüssig^^
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.
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
es sagt ja auch niemand das eine einheit ingame einem meter in wirklichkeit entspricht.
Vielleicht sind es 1 Yard
So dass der Wert 3,4 sogar Sinn macht!
Müsst ihr zwar wissen ich würde den Wert 3.5 nehmen ist Reallistisch beim Fahren
Ich hab 3.3 genomm xD und alle leute meinen die autos sind zu LAHM!
Naja ich finde e gut wen kaum ein Auto auf die 200 Kommt!
Infernus schafft locker 200 km/h. xD
Nehm den Honda NSX als beispiel, ähnelt dem Infernus und das er das schnellste Auto ist ( Auf Langstrecken) , schaust dir die höchste Geschwindigkeit an
und stellst sie je nach dem ein
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
...
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