otimizar cуdigo -
JoshNudock - 22.06.2015
Fiz um cуdigo, mas quero deixa-lo 100 por cento funcional, o problema й que, quando eu me aproximo de um veiculo ele verifica outro veiculo mais longe do que o que eu desejo, a funзгo as vezes verifica o veiculo mais longe mesmo tendo um em sua frente.. como posso consertar?
PHP код:
public PlacaVeiculoPerto(playerid)
{
for( new i; i < MAX_VEHICLES; i++) {
new Float:Pos[3];
GetVehiclePos(i, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, Pos[0], Pos[1], Pos[2])) {
return i;
}
}
return 0;
}
Re: otimizar cуdigo -
RiqueP - 22.06.2015
De acordo com o cуdigo, ele vai ver o veiculo mais proximo, entre tanto, ele vai pegar o que foi criado primeiro.
@EDIT
Criei um cуdigo rapidamente, testa ai, qualquer coisa me avisa.
pawn Код:
public PlacaVeiculoPerto(playerid)
{
new Float:Pos[3], Float:Distancia, Perto;
Distancia = 999999.9;
for( new i; i < MAX_VEHICLES; i++)
{
GetVehiclePos(i, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, Pos[0], Pos[1], Pos[2]))
{
if(Distancia < GetPlayerDistanceFromPoint(playerid, Pos[0], Pos[1], Pos[2]))
{
Distancia = GetPlayerDistanceFromPoint(playerid, Pos[0], Pos[1], Pos[2]);
Perto = i;
}
}
}
return Perto;
}
Re: otimizar cуdigo -
zPain - 22.06.2015
Parar de criar variбveis em cada volta do loop й um bom comeзo.
PHP код:
stock PlacaVeiculoPerto(playerid) {
static Float:Pos[3], i;
for(i = 0; i < MAX_VEHICLES; ++i) {
GetVehiclePos(i, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, Pos[0], Pos[1], Pos[2])) {
return i;
}
}
return INVALID_VEHICLE_ID;
}
Re: otimizar cуdigo -
JoshNudock - 22.06.2015
Desculpe, mas nгo era aquele cуdigo acima que estava com erros, й o cуdigo abaixo, aquele verifica o id do veiculo, e este verifica, onde esta realmente o veiculo(PlayerPertoVeiculo), este й o cуdigo com o bug:
PHP код:
public PlayerPertoVeiculo(playerid)
{
static Float:Pos[3];
for( new i; i < MAX_VEHICLES; i++) {
GetVehiclePos(i, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, Pos[0], Pos[1], Pos[2])) {
return 1;
}
}
return 0;
}
Re: otimizar cуdigo -
RiqueP - 22.06.2015
Mesma coisa filho, sу muda que nгo й variavel e sim static, e estб fora do loop.
Re: otimizar cуdigo -
WLSF - 22.06.2015
Quote:
Originally Posted by JoshNudock
Fiz um cуdigo, mas quero deixa-lo 100 por cento funcional, o problema й que, quando eu me aproximo de um veiculo ele verifica outro veiculo mais longe do que o que eu desejo, a funзгo as vezes verifica o veiculo mais longe mesmo tendo um em sua frente.. como posso consertar?
PHP код:
public PlacaVeiculoPerto(playerid)
{
for( new i; i < MAX_VEHICLES; i++) {
new Float:Pos[3];
GetVehiclePos(i, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, Pos[0], Pos[1], Pos[2])) {
return i;
}
}
return 0;
}
|
O que estб acontecendo no seu cуdigo й que ele roda um loop nos veнculos de forma crescente.
Ou seja, ele roda do veнculo id 0, atй o veнculo 2000 (se existir).
Entгo a sua verificaзгo estб falha pelo simples motivo, ele vai retornar e cancelar o loop assim que encontrar um veнculo que supra a condiзгo que vocк criou. Exemplo: vocк tem 2 veнculos, o id 0 e o id 1, o id 1 tб mais perto que o id 0, porйm o id 0 estб dentro do `7.0` que vocк indicou na verificaзгo, logo ele vai retornar o id 0, apesar do id 1 estar mais perto.
Oque vocк pode fazer й criar um indicador para armazenar o veнculo que estiver mais perto, seguindo a lуgica que o RiqueP indicou no seu primeiro post.