[Ajuda] Pegar Distancia de um Player a Outro
#1

Entгo vocк que veio ao tуpico apenas me mostrar a funзгo: GetDistanceBetweenPlayers, Bom creio que nгo adiantarб
Pois quero aprender como calcular esta distancia em Segundos й isto mesmo segundos, pois estou desenvolvendo um sistema de corridas e preciso disto:
Eu ja reparei que teria que usar as seguintes funзхes em um timer:
GetDistanceBetweenPlayers


pawn Код:
stock Float:GetDistanceBetweenPlayers(playerid,targetplayerid)
{
    new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
    if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetplayerid)) {
        return -1.00;
    }
    GetPlayerPos(playerid,x1,y1,z1);
    GetPlayerPos(targetplayerid,x2,y2,z2);
    return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}
// E
GetPlayerSpeed(playerid,bool:kmh) // by misco edit by gamer_z
{
    new Float:Vx,Float:Vy,Float:Vz,Float:rtn;
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
    rtn = floatsqroot(Vx*Vx + Vy*Vy + Vz*Vz);
    return kmh?floatround(rtn * 100 * 1.63):floatround(rtn * 100);
}
Se vocк conseguir resolver estб conta, fique sabendo que serie eternamente grato
Reply
#2

Isso й dado pelo tempo passado por checkpoint de cada jogador.

Por exemplo, estou correndo contra o joгozinho, e ele acabou no mesmo checkpoint que eu passei б 5 segundos atrбs. Logo, estamos a 5 segundos de distвncia.

Ou vocк pode aplicar бlgebra vetorial, primeiro faзa o calculo da distancia entre os jogadores baseados nas coordenadas deles.

Sendo a minha posiзгo A(100,200,300) e a do joгozinho J(200,400,600)

Sу aplicar na forma de distвncia entre pontos:



DP = raiz quadrada( (200 - 100)І + (400 - 200)І + (600 - 300)І )
DP = raiz quadrada( 10000 + 40000 + 90000)
DP = raiz quadrada( 140000)
DP = 374,16. Esse й o modulo do vetor distвncia.

Sobre o tempo em segundos vocк pode pegar a velocidade do jogador, e entгo calcular quanto tempo leva para ele percorrer o mуdulo do vetor distвncia.

Vocк pode usar GetVehicleVelocity para pegar a velocidade instantвnea de cada eixo do plano cartesiano.



Supondo que o deslocamento seja (100,40,2)

Aplicar a fуrmula de velocidade instвntanea achando o vetor velocidade resultante:

Vi = raiz quadrada ( VxІ + VyІ + VzІ)
Vi = raiz quadrada ( 100І + 40І + 2І)
Vi = raiz quadrada (10000 + 1600 + 4)
Vi = 107,72. Velocidade instвntanea

Mas acontece que velocidade instвntanea й independente do tempo, portando nгo seria possнvel calcular qual seria a velocidade REAL do veнculo.

Tendo esses dados, vocк pode calcular a velocidade do veнculo (sem ser a instвntanea).
Pegando a distвncia de dois pontos em um intervalo de por exemplo 0,5 segundos.

Entгo dividir a distвncia entre dois pontos por 0,5 sendo assim a velocidade seria, em um caso de deslocamento de 100 unidades

100 / 0,5 = 200u/s

Com essa informaзгo, basta dividir a distвncia entre dos dois jogadores pela velocidade

374,16u / 200u/s = 1,87 segundos.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)