Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Akademia GMCLANu
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy GML
Treść artykułu
Warunki i pętle w GM
autor: Tymon (7.12.05)
W warunkach bądź pętlach potrzebna będzie ci znajomość operatorów porównania takich jak 'A równe B' albo 'A mniejsze od B', pewnie znasz je z lekcji matematyki. Używamy w GMLu takich oto operatorów:
== - jeśli A jest równe B. Dość często użytkownicy GMLa stawiają pojedynczy znak '=', lecz program nie traktuje tego jako przypisania wartości zmiennej tylko jako znak równości, ale jest tak tylko w warunkach i pętlach (w PHP pojedynczy znak '=' zawsze oznacza przypisanie wartości zmiennej).
< - jeśli A jest mniejsze od B.
> - jeśli A jest większe od B.
>= - jeśli A jest większe równe od B. Pamiętaj ze zapis '=>' jest błędem!
<= - jeśli A jest mniejsze równe od B. Pamiętaj ze zapis '=<' jest błędem!
!= - jeśli A nie jest równe B.

Co to warunek? W GML jest to element który musi zostać spełniony aby wykonać jakieś instrukcje. Aby sprawdzić czy warunek jest spełniony (bądź nie) używa się 'if' (Pol. jeżeli), konstrukcja wygląda tak:
gml:
if (<warunek>) <instrukcja>;
Instrukcja zostanie wykonana jeśli warunek został spełniony. Przy sprawdzaniu warunków potrzebne są operatory porównania.
Razem z 'if' można używać 'else' (Pol. w przeciwnym razie) czyli jeśli warunek nie został spełniony to mają być jakieś inne instrukcje. Konstrukcja wygląda tak:
gml:
if (<warunek>)
{ <instrukcje_1>; }
else
{ <instrukcje_2>; }
Możesz też łączyć np. dwa warunki za pomocą takich znaków (operatorów logicznych):
&& - oznacza 'and' (jeśli oba warunki są spełnione).
|| - oznacza 'or' (jeśli jeden z warunków jest spełniony).
^^ - oznacza 'xor' (jeśli tylko jeden z warunków jest spełniony).
Teraz mały przykład:
gml:
//Wykona tylko jeśli wszystkie warunki są spełnione
if (wiek>=0)
&& (zycie<=0)
&& (imie=='Jasio')
{ /* Akcja */ }

//Wykona tylko jeśli jeden z warunków zostanie spełniony
if (wiek==100)
|| (zycie==0)
{ /* Akcja */ }
Wszystko jasne? Jeśli nie to zapraszam do przeczytania artykułu Sadama ;)
Przy każdej grze pojawia się naprawdę dużo tego typu warunków np. czy gracz wcisną klawisz albo czy ma 0 żyć. Wiec znajomość konstrukcji 'if' jest podstawa =] Podam jeszcze kilka przykładów żebyś zobaczył jak to wygląda w praktyce:
gml:
if (energia<=0) { /*Akcja*/ } else { /*Inna akcja*/ }
if (imie!='Jasio') { /*Akcja*/ }
if (czas==100) && (zycia>0) { /*Akcja*/ }
Przyjrzyjmy się jeszcze takiemu przykładowi:
gml:
if (posiada_przedmiot) { /*Akcja*/ }
Zostanie tutaj sprawdzone czy warunek nie ma wartość 'false' (fałsz). Jeszcze jedna ciekawostka, nie musisz używać nawiasów '(' i ')' choć tak wygląda to czytelniej =)
Kolejnym typem warunku jest 'switch' (Pol. przełącznik). Jego konstrukcja wygląda tak:
gml:
switch (<warunek>)
{
case <wartosc_1>: <instrukcje_1>; ... ; break;
case <wartosc_2>: <instrukcje_2>; ... ; break;
...
default: <instrukcje>;
}
Jego działanie wygląda następująco:
1. Sprawdza <warunek> dla <wartosc_1>.
2. Jeśli jest spełniony to wykonuje <instrukcje_1>.
3. Kończy sprawdzanie kolejnych wartości dla warunku jeśli po instrukcjach znajduje się 'break' w przeciwnym wypadku powtarza kroki 1-3 aż do skończenia się wartości.
4. Jeśli żaden z warunków nie został spełniony to wywołuje instrukcje znajdujące się po 'default' (Pol. domyślne).

Pętla jest w pewnym stopniu warunkiem tylko ze tutaj instrukcje są wykonywane dopóki warunek jest spełniony. W pętlach używamy dwóch poleceń: break i continue. break przerywa wykonywanie pętli a continue zaś ją kontynuuje. Pierwsze z pętli która chce omówić jest pętla 'while' (Pol. dopóki). Jej konstrukcja wygląda tak:
gml:
while (<warunek>) <instrukcje>;
Instrukcje w pętli będą wykonywane do momentu nie spełnienia warunku bądź przerwania pletli.
Kolejna pętla jest 'do until' (Pol. rób dopóki). Jej struktura wygląda tak:
gml:
do <instrukcje> until (<warunek>)
Do tej pętli bardzo podobna jest pętla 'while' lecz jest jedna wielka różnica, w pętli 'while' najpierw sprawdzane są warunki a potem wykonywane instrukcje, zaś w 'do until' najpierw wykonywana instrukcja a potem sprawdzany warunek (wiec instrukcje zostaną przynajmniej 1 raz wykonane).
Najprostsza z pętli jest 'repeat' (Pol. powtarzaj). Powtarza ona po prosu jakieś X razy instrukcje. Jej konstrukcja wygląda tak:
gml:
repeat(<ilosc powtorzen>) <instrukcje>;

Jest jeszcze pętla 'for' (Pol. dla). Jest dość trudna do zrozumienia, sam długi okres czasu nie mogłem dojść jak działa. Jej konstrukcja wygląda następująco:
gml:
for(<wartosc_poczatkowa>;<warunek>;<instrukcja>;) <inne instrukcje>;
W działaniu wygląda ona tak:
1. Tworzy zmienną o wartości <wartosc_poczatkowa>.
2. Sprawdza <warunek>.
3. Wykonuje <instrukcja>.
4. Powtarza kroki 2-4 aż do momentu gdy warunek nie zostanie spełniony.
Teraz mały przykład:
gml:
for(n=1;n<10;n+=1;) { /*Jakas akcja*/ }
Instrukcja będzie wykonywana dopóki zmienna n będzie mniejsza od 10. Ważne są tutaj te średniki wiec pamiętaj żeby zawsze je postawić gdzie trzeba =D

To tyle jak narazie =] Teraz włącz sobie Game Makera i przećwicz wszystko kilka razy ;)
głosów: 11 | ocena: 6.09 oceń zasób | dodał: Tymon
Komentarze
stron: 21

2


av

Matthew (16:04, 2.11.2006)

while = dopóki

av

Maximal (16:40, 2.11.2006)

Łał, geniusz z Ciebie

av

Marmot (21:18, 2.11.2006)

A ja nadal będę wam spamował, żebyście kurcze blade dali ten mój artykuł o gml na gmclan!

av

Patrysław (9:01, 3.11.2006)

Wyślij mi PM żebym nie zapomniał, to dzisiaj po południu dodam.

av

Matthew (16:03, 3.11.2006)

Quote
[Łał, geniusz z Ciebie ]
Dzięki, wiedziałem, że jestem geniushem Byłem po prostu zbyt skromny...

av

Markuz (17:19, 28.06.2010)

Błąd w ostatnim kodzie:
for(n=1;n<10;n+=1 { /*Jakas akcja*/ ) - zamiast nawiasu ) powinna być klamra }

av

Tymon (19:42, 28.06.2010)

Jesteś genialny! Znalazłeś błąd w kodzie sprzed 5 lat.

av

gnysek (20:05, 28.06.2010)

Myślę, że komentarz w Twoim awatarze mówi wszystko na ten temat

av

Markuz (8:03, 29.06.2010)

Heh ludzie nadal korzystają z tych tutków, ale jak chcecie ....

av

Tymon (9:08, 29.06.2010)

Jakbym mógł to sam bym dawno poprawił ten artykuł.

av

Garry692 (11:06, 29.06.2010)

Markuz: jeśli są tak głupi, że nie rozumieją errora "} expected" to ich problem

av

PolskiFrancuz (9:14, 10.04.2012)

W pętli for jest błąd "{ /*Jakas akcja*/ )"
Użyto jako zakończenie, nawiasa zwykłego zamiast klamrowego. Powinno chyba być tak: { /*Jakas akcja*/ }

av

Tymon (11:29, 10.04.2012)

Tak jakby 2 lata temu ktoś już o tym wspominał, wiesz?

av

PolskiFrancuz (16:06, 10.04.2012)

ale chyba nikt niezauważył bo nic się niezmieniło D

av

Tymon (23:39, 10.04.2012)

Przeczytaj to co jest napisane wyżej, będziesz wiedział czemu.

stron: 21

2



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
13 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 13, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
Chell (21:14, 11.12.18):
owszem, wykrzacza sie jak jest url bez sciezki po /
Sutikku (20:25, 11.12.18):
tfu, gmclan nie gm
Sutikku (20:25, 11.12.18):
GameMaker ma nową ikonkę teraz jak mam otwartą kartę, czy po prostu nigdy na to nie zwracałem uwagi?
Konrad-GM (16:14, 11.12.18):
ImageMagick?
gnysek (23:14, 10.12.18):
tyle ikonek przerabiać ?
exp (19:10, 10.12.18):
a może dać żółtą obwódkę wokół ikonek
gnysek (17:29, 10.12.18):
poszukam jeszcze jak znaleźć, które aktualny user czytał i wtedy dokończę to, żeby działało jak trzeba
gnysek (17:28, 10.12.18):
ale na forum też przeczytane są szare, a nieprzeczytane kolorowe
Chell (16:37, 10.12.18):
a moze by tak nowosci dac na szaro, a odczytane na kolorowo? teraz tak smutno wyglada
gnysek (14:50, 10.12.18):
Tu masz pobieranie danych: gmclan.org/index.php?plik=227
nowy_user (14:04, 10.12.18):
Hmm., a jak dużo jest z tym roboty? Podejrzewam, że to już raczej wymaga konkretnego skilla... póki co znalazłem coś takiego, wygląda nieźle, korzystał ktoś? : marketplace.yoy...unt-online-data
gnysek (13:49, 10.12.18):
Ja robiłem, za pomocą zapytań normalnych z GMa (http_request albo coś takiego) + PHP na serwerze.
nowy_user (13:32, 10.12.18):
Hej, czy ktoś z was kiedyś robił prosty system logowania i rejestracji w GMie? Tak aby konto zapisywało się na serwerze, i aby admin mógł w razie czego zablokować dostęp.Polecacie jakiś dobry extention ( może być płatny) , żeby nie wynajdować koła od nowa?
exp (23:59, 9.12.18):
teraz spoko wygląda
MaxGaming (23:28, 9.12.18):
To już dużo lepsze! Chociaż nadal wygląda trochę jakby to był bug a nie feature
gnysek (22:33, 9.12.18):
ok, to zostawię wersję pierwszą jaką miałem - zmniejszenie przeźroczystości. Będą lekko jaśniejsze ikonki.
MaxGaming (22:24, 9.12.18):
ale nie wszystko na szaro(bo najczęściej większość tematów jest szara przez mały ruch)
MaxGaming (22:24, 9.12.18):
lepiej już oznaczyć wykrzyknikiem małym te nowe, albo coś
MaxGaming (22:23, 9.12.18):
Według mnie to glupio działa. Nagle wszystko jest szare jakby się zepsuło
gnysek (17:26, 9.12.18):
Od teraz posty napisane przed waszą ostatnią wizytą dostaną szarka ikonkę na stronie głównej - łatwiej znaleźć nowy kontent
MaxGaming (17:22, 9.12.18):
po prostu rób coś, zdobywaj doświadczenie i czytaj na jakiś temat żeby się rozwijać
exp (16:43, 9.12.18):
kurczę chciałbym się znać na czymś tak jak ty na gamedevie
exp (16:42, 9.12.18):
aha, więc to o to chodzi
gnysek (13:51, 9.12.18):
prawdopodobnie po to, żeby Steam VAT odprowadzał w stanach, w których trzeba, w Twoim imieniu.
gnysek (13:51, 9.12.18):
bo teraz 100$ wystarczy, tylko z polskiego punktu widzenia musisz zgłosić firmę do podatku (zerowego), w USA (telefonicznie), żeby dostać ichni NIP.
exp (13:40, 9.12.18):
właśnie też wyczytałem to w regulaminie, no ale coś mi tu nie pasuje. ludzie ciągle wrzucają na steama takie gówienka, że nie wierzę, że oni się tak wysilali
gnysek (13:24, 9.12.18):
musiałbyś założyć firmę, zawrzeć umowę ze steam itd.
Temporal (9:52, 8.12.18):
ambicje zawsze nas gubią
exp (22:52, 7.12.18):
w sensie 99 dolarów
exp (22:50, 7.12.18):
tak z ciekawości, jakbym chciał sprzedawać swoją grę, np. na steamie, to po prostu wystarczy zrobić upgrade do wersji "developer" za cztery stówki?
exp (14:37, 7.12.18):
ale mój poprzedni koncept był całkiem fajny i chyba oryginalny. było to tak jakby połączenie spelunky i contry, choć nie do końca
exp (14:36, 7.12.18):
znów naszła mnie ochota na zrobienie gierki i dobrze wiem, że skończy się tak, że mój prosty pomysł się rozrośnie i nigdy jej nie skończę
MaxGaming (23:53, 6.12.18):
co tam u was mordeczki
MaxGaming (3:01, 5.12.18):
też o tym myślałem, lub po prostu ograniczenie np maks 4 strzał i trzeba wytwarzaćnowe
gnysek (23:04, 4.12.18):
Dzida/oszczep. Można rzucać i ma jakaś tam wytrzymałośc, nie trzeba naboi, w razie czego można wytwarzać nową.
exp (19:16, 4.12.18):
może zastawianie pułapek
MaxGaming (17:45, 4.12.18):
U mnie to działa trochę inaczej. Ciężko ranne zwierze przyśpiesza i albo ucieka albo podejmuje walkę i wtedy szarżuje w naszym kierunku
MaxGaming (17:41, 4.12.18):
np łuk, tylko trzeba to tak zrobić aby taki łuk nadawał się jedynie do absolutnie podstawowych celów
MaxGaming (17:41, 4.12.18):
ze trzeba coś zrobić jako taką broń powszednią która akurat będzie miała sporo naboi i łatwo je będzie zdobyć
MaxGaming (17:40, 4.12.18):
hmm, ciekawy system, ale na razie chodzi mi
gnysek (17:37, 4.12.18):
wtedy można mieć mało naboi i ryzykujesz, albo strzelasz 2/3 razy i zgon od razu, albo czekasz aż padnie
gnysek (17:36, 4.12.18):
duże powinny krwawić, jednym strzałem = czekasz 5 minut na śmierć, albo strzelasz dalej
MaxGaming (17:35, 4.12.18):
a chodzi mi o stworzenie bardzo realnego respectu dla dużych zwierząt, chcę żeby polowanie na coś dużego było dla gracza czymś wyjątkowym i odświętnym, kiedy znajdzie jakąś amunicję do fajniejszej broni
MaxGaming (17:34, 4.12.18):
Co nie jest takie proste, bo strzelanie z łuku 3 razy żeby zabić zająca to na przykłąd pomyłka i byłoby bardzo śmiesznie. Zabicie zająca za jendym strzałem = obrażeniom na tyle dużym że na upartego upolowałoby się i dużo większe zwierzęta
MaxGaming (17:34, 4.12.18):
coś takiego żeby nie dało się z tego za wiele zrobić, ale żeby wystarczyło na polowanie na najprostrze zwierzęta pokorju zająca żeby zdobyć pożywienie
MaxGaming (17:33, 4.12.18):
a same pociski będą na wagę złota. Tylko muszę wymyślić jak w to wszystko wpleść uzbrojenie inne niż broń palna
MaxGaming (17:33, 4.12.18):
broń krótka na prawdę nie za bardzo nadaję się do polowania ze względu na swój bardzo mały zasięg i celność, broń pokroju kar98k dla gracza który według fabuły nie za bardzo miał wcześniej kontakt z militariami nie jest szybka do przeładowania i chociaż ma duży zasięg i potrafi powalać z nóg na prawdę szybko to jednak jeden pochopny strzał i zanim przeładujemy to możemy być już martwi
MaxGaming (17:31, 4.12.18):
ale jednoczęśnie funkcjonalna. Unikam realizmu na siłę który by komplikował rozgrywkę i zmieniał ją w niezrozumiałą, a staram się to nadrobić po prostu realizmem w postaci ograniczeń które nałożone są na nas
MaxGaming (17:30, 4.12.18):
jak wspominałem już moja gra ma być jak najprostrza zarówno dla gracza jak i dla mnie w rozwijaniu
MaxGaming (17:30, 4.12.18):
a w grze otwartego świata wcale być nie miało, dopiero w trakcie tworzenia doszedłem do wniosku że można to łatwo i fajnie zrobić i jednoocześnie uniknąc problemów typu "mam misje fabularną 10tyś pikseli ode mnie"
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2018. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2018 {=|=} fable_inside();

[ Czas generowania strony: 0.01842 sekund ] [ Liczba zapytań MySQL: 13 ]