MartinHavo 14 Odesláno: 14. Červenec, 2012 Share Odesláno: 14. Červenec, 2012 Zdravím ciciny a cicinky , keďže v pawne nie som zlý tak som sa rozhodol spraviť svoj 1. tutoriál a to špeciálne na statické premennú. Static v pawn sa zapisuje ako: static [nazov premennej]; napr. static afk; A určite sa pýtate načo je dobrá statická premenná? Ukážem vám na nasledujúcom príklade rozdiel medzi lokálnou premennou a statickou Lokálna premenná forward test(); // Toto je forward pokial o ňom neviete doporučujem si pozrieť tutorial o ňom... ak neexsituje tak spravím main() { print(pustíme si SA:MP server a uvidíme čo sa stane); test(); // Pustíme su našu novú funkciu //Teraz sa nám na obrazovku vytlačilo "Hodnota lokálne premennej 1" //Znova pustíme funkciu TEST test(); //Znova nám vytlači "Hodnota lokálne premennej 1" } test() // Naša funkcia { new i; i++; printf("Hodnota lokálne premennej %i ", i); return 1; } Ok tak sme zistili že hodnota lokálnej premennej sa nezachová... Teraz si vyskúšame statickú premennú. Statická premenná forward test(); main() { print(pustíme si SA:MP server a uvidíme čo sa stane); test(); // Pustíme su našu novú funkciu //Teraz sa nám na obrazovku vytlačilo "Hodnota lokálne premennej 1" //Znova pustíme funkciu TEST test(); //Znova nám vytlači "Hodnota lokálne premennej 2" } test() // Naša funkcia { static i; i++; printf("Hodnota lokálne premennej %i ", i); return 1; } Ako ste mohli vidieť hodnota premennej vo funkcii test sa zachováva! Takže ak budeme viac krát púštať "test" tak hodnota premennej i sa bude neustále zväčšovať pokial nedosiahne premenná svoju najvyššiu hodnotu Využitie Samozrejme že táto premenná má veľa výhod. Ja ju využívam hlavne preto aby som zábraňoval veľkému množstvu globálnych premien Tak teraz vám ukážem využitie public OnPlayerCommandText(playerid, cmdtext[]) { if(strcmp(cmdtext, "/afk", true)) { static bool:afk[MAX_PLAYERS]; if(afk[playerid] == true) { TogglePlayerControllable(playerid,1); new string[64]; format(string,64,"Hráč %s je späť v hre", PlayerName(playerid) ); SendClientMessageToAll(playerid, 0xFFFFFFFF, string); afk[playerid] = false; }else{ TogglePlayerControllable(playerid,0); new string[64]; format(string,64,"Hráč %s je AFK", PlayerName(playerid) ); SendClientMessageToAll(playerid, 0xFFFFFFFF, string); afk[playerid] = true; } return 1; } return 0; } Tu máte jedno z mála využití... a ešte vám sem hodím stock ktorý treba: stock PlayerName(playerid) { new j[20]; GetPlayerName(playerid, j, 20); return j; } Poznámky Statická premenná sa dá využiť ako globálna ale mne príjde ako zbytočná a navyše sa správa takmer isto ako globálna ak keby ste chceli niečo vedieť tak klik [url = http://wiki.sa-mp.com/wiki/Scripting_Ba ... bal_static]sem[/url]. Statická premenná sa dá využiť aj v cykloch a všade na miesto obyčajných lokálnych kde chcete aby premenná nestratiloa hodnotu... Statické premenné môžu mať polia a môžu byť aj iné typy: float,bool... Zhrnutie Odkazy priamo na statické premenné ale ako som písal preferujem len lokálnu statickú premennú. http://wiki.sa-mp.com/wiki/Scripting_Basics#global_static http://wiki.sa-mp.com/wiki/Scripting_Basics#static_local Lokálná premenná stráca svojú hodnotu akonáhle skončí daná funckia alebo cyklus a iné veci... Preto je dobré využívať statickú premennú pre jej vlastnosť že po skončení funkcie alebo smyčky/cykla zachováva hodnotu. Statická premenná môže mať polia a aj dátovy typ Ak máte nejaké dotazy rád vam nanich odpoviem a nezabudnite ohodnotiť tutoriál... Ďaľší tutoriál bude na odkazovač AK NÁJDETE HRÚBKY UPOZORNITE MA! Arigato! Link to comment Share on other sites More sharing options...
fabbeN 3 Odesláno: 14. Červenec, 2012 Share Odesláno: 14. Červenec, 2012 Pekné Prvý tut ktorý som si prečítal celý! Teda okrem TuTu vytvárame includ 1o/1o.. dal si do mna trochu viacej vedomostí s pawn.. Takže statická premenná aj po vypnutí serveru ostane taká aka bola naposledy? Link to comment Share on other sites More sharing options...
Exitus 1 Odesláno: 14. Červenec, 2012 Share Odesláno: 14. Červenec, 2012 Nie len po ukončení danej funkcie / cyklu nestráca hodnotu teda stále existuje narozdiel od lokálnej ktorá po ukončení stráca platnosť Link to comment Share on other sites More sharing options...
MartinHavo 14 Odesláno: 14. Červenec, 2012 Author Share Odesláno: 14. Červenec, 2012 Nie len po ukončení danej funkcie / cyklu nestráca hodnotu teda stále existuje narozdiel od lokálnej ktorá po ukončení stráca platnosť presne Link to comment Share on other sites More sharing options...
fabbeN 3 Odesláno: 14. Červenec, 2012 Share Odesláno: 14. Červenec, 2012 Aha dik Vám Link to comment Share on other sites More sharing options...
Guest Odesláno: 14. Červenec, 2012 Share Odesláno: 14. Červenec, 2012 ja radšej normálnu globálnu ako globálnu, ktorá sa tvári ako lokálna mám rád tie premeny hore aby som ich hneď našiel a nehľadal po celom móde Link to comment Share on other sites More sharing options...
MartinHavo 14 Odesláno: 14. Červenec, 2012 Author Share Odesláno: 14. Červenec, 2012 ja radšej normálnu globálnu ako globálnu, ktorá sa tvári ako lokálna mám rád tie premeny hore aby som ich hneď našiel a nehľadal po celom móde ale nevýhoda je toho že ak máš moc veľa globálnych a často s nimi pracuješ tak sa ti stane že niekedy nevieš prečo sa ti premenná mení a máš v tom neporiadok btw. choď na Facebook nemám k dispozici skype Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now