[Ajuda] Como obter a posiзгo mais prуxima?
#1

Comeo faзo pra obter a posiзгo mais proxima, por exemplo:

pawn Код:
GetPlayerPos(playerid,x,y,z); // Obtenho a posiзгo a ser comparada
Entгo eu comparo com todas

pawn Код:
new Float:positions[2][3] = {
{2297.1064,2452.0115,10.8203},
{2297.0452,2468.6743,10.8203}
};
E seto a posiзгo do player nessa posiзгo que й a mais prуxima.

Alguйm sabe?
Reply
#2

pawn Код:
ReturnPosProx(playerid) {
    new Dist[3] = { 0xFFFF, ... };
    for(new i = (sizeof(positions) - 1); i > -1 --i) {
        if((Dist[1] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2])) < Dist[0]) {
            Dist[0] = Dist[1];
            Dist[2] = i;
        }
    }
    return Dist[2];
}

//Utilizando
new Prox = ReturnPosProx(playerid);
SetPlayerPos(playerid, positions[Prox][0], positions[Prox][1], positions[Prox][2]);
Nгo testei, mas й para funcionar!
Reply
#3

Paulor nгo deveria ser uma float? axo que seria assim..

pawn Код:
stock ReturnPosProx(playerid)
{
    static Float:result[2], i = 0,part;
    for(; i < sizeof positions; ++i)
    {
        result[0] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]);
        if(result[0] > result[1])
        {
           result[1] = result[0];
           part = i;
        }
    }
    return part;
}
Reply
#4

Esqueci desse detalhe, Corrigido! E o seu vai pegar a distancia maior e nгo a menor!

pawn Код:
ReturnPosProx(playerid) {
    new Float: Dist[2] = {65535.0, ...}, ReturnId;
    for(new i = (sizeof(positions) - 1); i > -1; --i) {
        if(Dist[0] > (Dist[1] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]))) {
            Dist[0] = Dist[1];
            ReturnId = i;
        }
    }
    return ReturnId;
}

//Utilizando
new Prox = ReturnPosProx(playerid);
SetPlayerPos(playerid, positions[Prox][0], positions[Prox][1], positions[Prox][2]);
Reply
#5

Nгo po, vai pegar a maior, pensa comigo.
pawn Код:
digamos que o resultado 1 й  = 50m ( no caso result[0])
ele irб comparar com o segundo resultado que estб nulo se for maior, ele definirб como maior. (result[1])
entгo sempre que o result[0] for maior que o resulte anterior, ele serб substiuido.
cada vez que for maior, ele vai substituir, e assim por diante.


a mesma lуgica que vocк usou nesta sua nova versгo.
Reply
#6

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
Nгo po, vai pegar a maior, pensa comigo.
pawn Код:
digamos que o resultado 1 й  = 50m ( no caso result[0])
ele irб comparar com o segundo resultado que estб nulo se for maior, ele definirб como maior. (result[1])
entгo sempre que o result[0] for maior que o resulte anterior, ele serб substiuido.
cada vez que for maior, ele vai substituir, e assim por diante.


a mesma lуgica que vocк usou nesta sua nova versгo.
Nгo, ele deseja que retorne a Posiзгo mais prуxima do Player, a sua funзгo vai retornar a mais distante do Player.
Reply
#7

minha falha, pensava que era o mais distante. lol.
Reply
#8

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
Paulor nгo deveria ser uma float? axo que seria assim..

pawn Код:
stock ReturnPosProx(playerid)
{
    static Float:result[2], i = 0,part;
    for(; i < sizeof positions; ++i)
    {
        result[0] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]);
        if(result[0] > result[1])
        {
           result[1] = result[0];
           part = i;
        }
    }
    return part;
}
Prevejo problemas com o static...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)