Funkcije

Započeo Edo., Decembar 18, 2017, 13:10:12 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Funkcije su moćni mali alati koji omogućuju premjeÅ¡tanje velikih ponovljenih bitova koda iz glavnog bloka, Å¡to olakÅ¡ava ureÄ'ivanje nečega Å¡to se koristi na viÅ¡e mjesta.

Stock
Modifikator funkcije "Stock" označava zastavicu koja kaže compiler da ignorira funkciju ili varijablu označenu s "stocks" u vrijeme sastavljanja, ako se ne koristi. To znači da kompilirani kod neće imati neiskorištene podatke, a time i manje prostora na disku i memoriji. Ipak, mora se primijetiti da obično nema potrebe deklarirati funkciju kao zaliha unutar gamemode ili filtercript. Najvjerojatnije ćete ionako htjeti koristiti tu funkciju, a prevodilac će izdati praktičan upozorenje u slučaju da ga zaboravite koristiti.

Prilikom sastavljanja skripte samo su funkcije stock koje upotrebljavate u skripti spremljene, a sve što ne uključite ne prikazuju se u sastavljenom ".amx", čime se povećava učinkovitost na jedan ili drugi način. Na primjer, ako imate funkciju stock koja je dala igraču vozilo, ali ga nikada ne upotrebljavate, kada idete na sastavljanje prevoditelja, ne bi se smetalo što je uključeno. To ga čini povoljnim da imaju velike knjižnice zaliha pohranjene u, jer skripta će samo "extract" one koje zahtijeva kod sastavljanja.

Primjeri
Neke uobičajene funkcije uključuju:

PlayerToPoint (Obustavljen. Umjesto toga koristite IsPlayerInRangeOfPoint).
Strtok (zastario, umjesto toga pogledajte sscanf).
IsNumeric
ReturnUser (zastario, još jednom pogledaj sscanf).
Funkcije mogu biti bilo koje duljine, od manjeg isječka do velikog dijela koda s više if / case izjava i drugih funkcija unutar njih. Ako želite, možete "nest" ili aktivirati funkcije unutar neke funkcije.

U nastavku su navedeni primjeri funkcija zaliha koji se koriste za spremanje zdravlja igrača na Float.

[pawn]stock Health(playerid)
{
   new Float:HP;
   GetPlayerHealth(playerid, HP);
   return _:HP;
}
stock Float:Health(playerid)
{
   new Float:HP;
   GetPlayerHealth(playerid, HP);
   return HP;
}[/pawn]

Stvaranje i korištenje
Zalihe funkcije, kao i kod normalnih funkcija, mogu imati brojne ulaze, uključujući nizove, cijele brojeve i plutače. Moraju se ispravno uputiti i na zaglavlju zaliha.

parametri:
Vrste ()
Niz Upućivanje na niz koristite "stringname []"
Integer Da biste upotrijebili cijeli broj, jednostavno unesite varijablu koju želite koristiti "broj"
Float Za plutače koristite "Float: name"
Postoji mnogo više vrsta koje se ovdje mogu koristiti (i u svim drugim funkcijama).

Evo primjera zaglavlja koja koristi sva tri:

[pawn]stock Lol(string[], count, Float:cord)
{
   printf("%s, %d, %f", string, count, cord);
}[/pawn]

Vraćanje višestrukih vrijednosti
Ponekad s funkcijama, ne želite vratiti ni jednu vrijednost, ali postavite više varijabli. Na primjer, GetXYInFrontOfPlayer vraća X i Y vrijednosti, što možda nije jednostavno pomoću povratka;

Najlakši način da to učinite bez upotrebe globalnih varijabli jest uporaba simbola "&".

Primjer u nastavku prikazuje primjenu i upotreba.

[pawn]GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
   new Float:a;
   GetPlayerPos(playerid, x, y, a);
   GetPlayerFacingAngle(playerid, a);
   if (GetPlayerVehicleID(playerid))
   {
       GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
   }
   x += (distance * floatsin(-a, degrees));
   y += (distance * floatcos(-a, degrees));
}[/pawn]

GetVehicleZAngle (GetPlayerVehicleID (playerid), a);
}
x + = (udaljenost * floatsin (-a, stupnjevi));
y + = (udaljenost * floatcos (-a, stupnjevi));
}
Da biste koristili ovu skriptu, trebali biste:

novi Float: x, Float: y, Float: z;
GetPlayerPos (playerid, x, y, z);
GetXYInFrontOfPlayer (playerid, x, y, 5,0);
SetPlayerPos (playerid, x, y, z);
Unosi označeni s "&" su mjesta na kojima će vrijednosti biti poslane nakon izvršenja skripte.

Opcionalni ulazi
Ponekad vam svibanj želite dio zaliha gdje kao i drugi puta nećete htjeti uključiti. Kada se to dogodi, možete postaviti zadanu vrijednost za varijablu tako da igrač ne dobije pogreške koje tvrde da nemaju točan broj argumenata.

[pawn]stock Freeze(playerid,on=0)
{
   switch(on)
   {
      case 0: TogglePlayerControllable(playerid,0);
      case 1: TogglePlayerControllable(playerid,1);
   }
}[/pawn]

Ovaj je primjer prilično besmislen jer ne dodaje dodatnu funkcionalnost, ali pokazuje dodatne inpute. Za zamrzavanje igrača, možete koristiti:

Freeze(playerid);
Freeze(playerid, 0);
Ali da se oslobodite igrača kojeg morate koristiti

Freeze(playerid, 1);
Kada koristite dionicu bez da unesete vrijednost za "na", dionice automatski koriste vrijednost 0. Ako dajete vrijednost za, upotrijebit će onaj koji ga dajete.

U nastavku se koristi booleovska varijabla (slaba oznaka) za implementaciju istog.

[pawn]stock ToggleFreezeStatus(playerid, bool: freeze = false)
{
   TogglePlayerControllable(playerid, freeze);
}[/pawn]

Može se koristiti na isti način kao što je prikazano, s T / F vrijednostima.

Eto jos jedan tutorijal.Samo da napomenem da sam samo preveo tutorijal sa engleskog na nas jezik.Nadam se da ce nekome pomoci.Uzivajte :D
••• Nexus Project Community •••
• Founder & Developer •

novi Float: x, Float: y, Float: z;
->
new Float: x, Float: y, Float: z;

XD
Software Developer