GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: krisk - 2012. Július 01. - 13:06:18

Cím: Hogyan mûködik a sebességmérõ?
Írta: krisk - 2012. Július 01. - 13:06:18
Üdv!
Ezt a tutorialt azért csináltam, mert sokan nincsenek tisztában vele, hogyan épül fel egy sebességmérõ script. Márpedig nem is olyan bonyorult, csak egy kis geometria, meg egy kis scriptelés kell, hogy a sajátodat megcsináld.
Cél:
 

Nézzük:
 

CMD:getspeed(playerid, params[]) {
   new Float:vVectors[4], string[30];
   GetVehicleVelocity(GetPlayerVehicleID(playerid),vVectors[0],vVectors[1],vVectors[2]);
   vVectors[3] = floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
   format(string,sizeof(string),\"A jármû sebessége: %i km/h\",vVectors[3]);
   SendClientMessage(playerid,0xFFFFFFFF,string);
   return 1;
}

 
Ez a script kiírja az adott sebességet amivel haladsz km/h-ban. Mit is csinál ez a script?
A GetVehicleVelocity függvény megad 3 sebességvektort: az j-t, ami az origóból (játékos) az x vektor mentén fut, a k-t, ami az y, és a l-t, ami a z mentén fut. A végleges sebességvektor legyen m.
A vektorok nagyságának összeadására szolgál az úgynevezett Euklidészi norma. Az Euklidészi norma kimondja, hogy egy n dimenziós térben a k vektor távolsága megegyezik a k vektor n számú \"komponenseinek\" négyzetösszegének négyzetgyökével. Mivel minden vektornak egy komponense van minden dimenzióban, ezért egyértelmû hogy a komponensek száma és a dimenzió megegyezik. A komponensek gyakorlatilag azt mutatják meg, hogy milyen x, ill y, z, etc... tengelybeli pontokkal lehet meghatározni a vektor \"hegyét\".
Példaként tegyük fel, hogy egy két dimenziós vektorunk van, aminek komponensei 5 és 2. Ezért a  két dimenziós vektor \"nyilának\" végpontja 5 és 2, egyszerûbben fogalmazva a vektor hegyének helye a koordináta-rendszerben (5;2). Tehát x=5, y=2. Ebben az esetben a végleges m vektor hossza:
|m| = sqrt(5^2+2^2)
ahol sqrt a négyzetgyökvonás, ^ a négyzetre emelés jele. Ezt tekinthetjük úgy is, mint két darab egy dimenziós vektor távolságának összeadását, mely egyik irányban az x irányban 5-öt, míg az y irányban 2-t haladt, majd a vektorkomponensek nyilait \"összekötjük\", így megkapva az m vektort. Ez a magyarázat teljesen azonos a fent említettel, hiszen amikor megkapjuk az (5;2) pontot, gyakorlatilag elmegyünk ötig (1 dimenziós x komponens), elmegyünk 2-ig (1 dimenziós y komponens), majd a kettõt összekötjük a találkozásnál. A kettõ megfogalmazás tehát analogikus. A vektor iránya egyébként lényegtelen, a sebességnél csak a vektor távolsága számít.
A sebességvektor a gyakorlati példában három dimenziós, hiszen egy 3D játékról beszélünk. A három dimenziós vektornak három darab egy dimenziós komponense van, egy az x, egy az y, egy a z irányban. Ahhoz, hogy a sebességet megkapjuk meg kell tudni a vektor normáját.
Tegyük fel, hogy a vektor egyes komponenseinek hossza x irányban 5, y irányban 3, z irányban 0.5, tehát egy olyan vektor hosszát kapjuk meg, aminek a \"hegye\" az (5;3;0.5) koordinátáknál helyezkedik el. Ebbõl egy három dimenziós vektort kaphatunk, és a sebességet megkaphatjuk, ha kiszámítjuk a vektor normáját:
|m| = sqrt((5^2)+(3^2)+(0.5^2)) = 5.85234996 valami hossz/valami idõ.
Elnézést kérek, fogalmam sincs, hogy mibe kapjuk meg az eredményt. Azt viszont tudom, hogyha megszorozzuk 136.66666-tal, megkapjuk a sebességet km/h-ban. Tehát:
sebesség = 5.85234996 * (136 + (2 / 3)) = 799.821161
A test 800 km/h-val halad.
Innentõl már csak kerekíteni kell, és megkapjuk a sebességet egész számban.
Cím: Hogyan mûködik a sebességmérõ?
Írta: TengeriMalac - 2012. Július 01. - 13:34:14
Kezdem érteni..  ;D
Megjegyzés: a legtöbb szerveren 160as szorzást használnak.
Cím: Hogyan mûködik a sebességmérõ?
Írta: instant - 2012. Július 02. - 06:55:05
Szép leírás lett!
És sokat fog segíteni nekem ez a leírás
Cím: Hogyan mûködik a sebességmérõ?
Írta: 1ST_Chr - 2012. Július 15. - 18:49:47
Hali,
Csináltam egy GetVehicleSpeed funkciót de Tag Mismatch warningokat ír ki rá.
 

stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
}
Cím: Hogyan mûködik a sebességmérõ?
Írta: DrAkE - 2012. Július 15. - 20:20:15
Idézetet írta: 1ST_Chr date=1342370987\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic
Hali,
Csináltam egy GetVehicleSpeed funkciót de Tag Mismatch warningokat ír ki rá.
 

stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]^2)+(vVectors[1]^2)+(vVectors[2]^2))*136.666667);
}

 



stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]*vVectors[0])+(vVectors[1]*vVectors[1])+(vVectors[2]*vVectors[2]))*136.666667);
}
Cím: Hogyan mûködik a sebességmérõ?
Írta: 1ST_Chr - 2012. Július 15. - 20:29:04
Idézetet írta: DrAkE date=1342376415\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic


stock GetVehicleSpeed(vehicleid)
{
new Float:vVectors[3];
      GetVehicleVelocity(vehicleid,vVectors[0],vVectors[1],vVectors[2]);
return floatround(floatsqroot((vVectors[0]*vVectors[0])+(vVectors[1]*vVectors[1])+(vVectors[2]*vVectors[2]))*136.666667);
}

 

Köszi, nem tudtam mi az a ^2 de mostmár tudom, az a hatvány :D
Cím: Hogyan mûködik a sebességmérõ?
Írta: Spedy - 2012. Július 28. - 14:27:37
Jó leirás!
Cím: Hogyan mûködik a sebességmérõ?
Írta: DJтoυcн - 2012. Július 29. - 10:46:11
Idézetet írta: ZzzzzZ date=1341204905\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23587\" data-ipsquote-contentclass=\"forums_Topic
Szép leírás lett!
És sokat fog segíteni nekem ez a leírás