Warunek If
darkman
14.09.2008
Napisze tutaj jak używać warunku if(...) z zaoszczędzeniem użycia CPU.
Np.
Taki przykład kodu zużywa więcej procesora - dlaczego? Ponieważ za każdym razem kiedy stawiany jest warunek if(..) wywoływana jest funkcja get_user_team(player).
W użyciu wygląda to mniej więcej tak:
Można to zmienić na:
Teraz będzie to wyglądało mniej więcej tak:
Zamiast if można też użyć przełącznika switch, będzie to najlepsze rozwiązanie:
Będzie to wyglądało tak:
Np.
if (get_user_team(player) == TEAM_T) { //...kod } else if (get_user_team(player) == TEAM_CT) { //...kod } else if (get_user_team(player) == TEAM_SPECTATOR) { //...kod }
Taki przykład kodu zużywa więcej procesora - dlaczego? Ponieważ za każdym razem kiedy stawiany jest warunek if(..) wywoływana jest funkcja get_user_team(player).
W użyciu wygląda to mniej więcej tak:
Wywołanie get_user_team Porównaj drużyne usera do tej która jest postawiona w Ifie, jeżeli jest prawdziwa - wykonaj kod Wywołanie get_user_team Porównaj drużyne usera do tej która jest postawiona w Ifie, jeżeli jest prawdziwa - wykonaj kod Wywołanie get_user_team Porównaj drużyne usera do tej która jest postawiona w Ifie, jeżeli jest prawdziwa - wykonaj kod
Można to zmienić na:
new team = get_user_team(player) if (team == TEAM_T) { //...kod } else if (team == TEAM_CT) { //...kod } else if (team == TEAM_SPECTATOR) { //...kod }
Teraz będzie to wyglądało mniej więcej tak:
Wywołanie get_user_team Porównaj drużyne usera do tej która jest postawiona w Ifie, jeżeli jest prawdziwa - wykonaj kod Porównaj drużyne usera do tej która jest postawiona w Ifie, jeżeli jest prawdziwa - wykonaj kod itd.
Zamiast if można też użyć przełącznika switch, będzie to najlepsze rozwiązanie:
new team = get_user_team(player) switch (team) { case TEAM_T: //kod... case TEAM_CT: //kod... case TEAM_SPECTATOR: //kod... }
Będzie to wyglądało tak:
Wywołaj get_user_team Wykonaj kod Wykonaj kod Wykonaj kod
grankee
15.09.2008
No darkman, znowu muszę Cię poprawiać ;>
Wywołanie Switch a if(team==TEAM_CT) w wykonaniu przez procesor wygląda identycznie, popraw byka:P
Wywołanie Switch a if(team==TEAM_CT) w wykonaniu przez procesor wygląda identycznie, popraw byka:P
darkman
15.09.2008
dobra mistrzu skmiń coś i pokaż a nie poprawiaj moich tutków dlatego powiedziałem że switch będzie najlepszą metodą do zrobienia tego bo najmniej pisania i kod bardziej przejrzysty.
Miczu
15.09.2008
Pomijajac fakt, ze jesli ktos nie zna zbytnio zastosowan funkcji sterujacych (czy. if, swich [nie wymieniam for i while bo to dla mnie bardziej petle ]) to raczej nie poradzi sobie z pawn'em - mowiac inaczej, malo ludzi uzna to za szczegolnie przydatne.
Pomijajac powyzsze, GJ.
Pomijajac powyzsze, GJ.
choyrack
16.09.2008
Jak się czepiamy to można jeszcze
Po co sprawdzać 3 warunki Skoro gracz nie będzie T, ani nie będzie CT to musi być SPEC :-D
I to samo przy switch.
Jeden warunek mniej do sprawdzania - jak już mówimy o wykorzystaniu procesora.
Po co sprawdzać 3 warunki Skoro gracz nie będzie T, ani nie będzie CT to musi być SPEC :-D
new team = get_user_team(player) if (team == TEAM_T) { //...kod } else if (team == TEAM_CT) { //...kod } else { //...kod }
I to samo przy switch.
Jeden warunek mniej do sprawdzania - jak już mówimy o wykorzystaniu procesora.
darkman
16.09.2008
nie przyszło ci do głowy, że ktoś może sobie wymyślić coś takiego, że np. terroryści dostają inną broń ct inną? jeden z wielu przykładów które można wymyśleć w ciągu sekundy.
mgr inż. Pavulon
16.09.2008
Akurat choyrack'owi chodziło o to żeby zostawić dwa sprawdzanie tj:
Czy jesteś CT, a może jesteś TT, jeśli nie to jesteś SPECT'em.
Czyli CT dostaje swoją broń, TT dostają swoją a pozostali(SPECT'y) nic.
Czyli wszystko jest ok i tylko dwa IF'y.
Czy jesteś CT, a może jesteś TT, jeśli nie to jesteś SPECT'em.
Czyli CT dostaje swoją broń, TT dostają swoją a pozostali(SPECT'y) nic.
Czyli wszystko jest ok i tylko dwa IF'y.
Miczu
16.09.2008
Sa 4 mozliwe wartosci:
CS_TEAM_T, CS_TEAM_CT, CS_TEAM_SPECTATOR, CS_TEAM_UNASSIGNED
CS_TEAM_T, CS_TEAM_CT, CS_TEAM_SPECTATOR, CS_TEAM_UNASSIGNED
.Cz!t3R
08.09.2010
Nie wiem dlaczego, ale nie mówicie o tym ułatwieniu w warunkach...:
Pokażę na przykładzie ustawiania wartości
Czyli tak sprawdza czy Wartosc jest większa od 100 jeśli tak ustawia na 100, jeśli nie dodaje 1. Można te ułatwienie użyć w wielu przypadkach tworząc kod bardziej przejrzysty.
[Warn = GoQ]http://amxx.pl/warunki-t5396.html [/warn]
Pokażę na przykładzie ustawiania wartości
Wartosc = (Wartosc > 100) ? 100 : Wartosc+1;
Czyli tak sprawdza czy Wartosc jest większa od 100 jeśli tak ustawia na 100, jeśli nie dodaje 1. Można te ułatwienie użyć w wielu przypadkach tworząc kod bardziej przejrzysty.
[Warn = GoQ]http://amxx.pl/warunki-t5396.html [/warn]