Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Warunek If


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
11 odpowiedzi w tym temacie

#1 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 14.09.2008 22:45

Napisze tutaj jak używać warunku if(...) z zaoszczędzeniem użycia CPU.

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

  • +
  • -
  • 4

#2 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2008 19:42

No darkman, znowu muszę Cię poprawiać ;>
Wywołanie Switch a if(team==TEAM_CT) w wykonaniu przez procesor wygląda identycznie, popraw byka:P
  • +
  • -
  • 2

#3 darkman

    Wszechwiedzący

  • Autor tematu
  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 15.09.2008 19:47

dobra mistrzu skmiń coś i pokaż a nie poprawiaj moich tutków :D dlatego powiedziałem że switch będzie najlepszą metodą do zrobienia tego bo najmniej pisania i kod bardziej przejrzysty.
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 15.09.2008 22:46

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 :P]) to raczej nie poradzi sobie z pawn'em - mowiac inaczej, malo ludzi uzna to za szczegolnie przydatne.

Pomijajac powyzsze, GJ.
  • +
  • -
  • 0

#5 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 16.09.2008 10:02

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
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.
  • +
  • -
  • 0

#6 darkman

    Wszechwiedzący

  • Autor tematu
  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 16.09.2008 16:43

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.
  • +
  • -
  • 0

#7 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 16.09.2008 17:07

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.
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 16.09.2008 17:24

Sa 4 mozliwe wartosci:
CS_TEAM_T, CS_TEAM_CT, CS_TEAM_SPECTATOR, CS_TEAM_UNASSIGNED
  • +
  • -
  • 1

#9 Zullus

    Nowy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:5
Offline

Napisano 23.06.2009 11:36

W jakim wypadku gracz jest CS_TEAM_UNASSIGNED ?
  • +
  • -
  • 0

#10 Knopers

    Nie patrz tak na mnie !

  • Przyjaciel

Reputacja: 588
Wszechwiedzący

  • Postów:2 013
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Cz-wa
Offline

Napisano 23.06.2009 11:50

jak gościu wszedł na serwer i jeszcze teamu nie wybrał
  • +
  • -
  • 0

#11 Gość__*

  • Gość

Reputacja: 0

Offline

Napisano 04.08.2009 20:15

if = instrukcja warunkowa ( takie małe domówienie ).

#12 .Cz!t3R

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:16
  • Lokalizacja:Polany
Offline

Napisano 08.09.2010 21:17

Nie wiem dlaczego, ale nie mówicie o tym ułatwieniu w warunkach...:
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]
  • +
  • -
  • 0
new .Cz!t3R [32];




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych