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
3 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 2, ukrytych: 0
Adriann, ANtY
Użytkownicy na czacie discord
gnysek (18:29, 19.02.18):
W WPF można robić design apek w XAMLu ? włącznie z animacjami
ANtY (15:51, 19.02.18):
co to za stanowisko C# Designer?
Wojo (12:57, 16.02.18):
Nie
gnysek (9:11, 16.02.18):
Widziałeś kiedyś stackoverflow ?
Wojo (19:36, 15.02.18):
Fajnie jakby się zarabialo a problemy się opisywalo na gmclanie, chociaż ktoś już tak próbował robić.
MaxGaming (18:10, 15.02.18):
oj gnysek, szukasz dziury w cały. Po pierwsze nie wiedziałem właśnie co psuje stronę zupełnie, po drugie nie chiało mi się bawić w takie rzeczy bo dłużej by to zajęło niż potem komuś znaleźć błędy. No a cóż, to każdy mówi jeżeli robisz komercyjnie to i to to musisz wiedzieć to i to. Skoro robię coś komercyjnie i zarabiam to znaczy że umiem wystarczająco dużo żeby to robić i zarabiać
gnysek (16:32, 15.02.18):
Taki hint: w serwisach typu twitter/facebook/discord można wkleić printscreena ze schowka
Wojo (16:23, 15.02.18):
Ja kiedyś dawalem screeny na imageshack to byly czasy...
I am vader (12:10, 15.02.18):
Najlepsze są serwisy do dzielenia się screenami jak puush czy gyazoo, chociaz sam korzystam z feenus ktore jest prywatne niestety wiec tylko ja i pare innych osob ma tam wstep.
Wojo (10:59, 15.02.18):
Służę pomocą tym co nie umieją robić screenów
Wojo (10:58, 15.02.18):
Nawet ja wiem jak to zrobic naciskasz klawisz z napisem prt scr
gnysek (10:53, 15.02.18):
jak robisz komercyjne strony to powinieneś takie rzeczy umieć
gnysek (10:53, 15.02.18):
no ale to całej strony nie trzeba pokazać, żeby naprawić błąd, można zrobić screena i obciąć i pokazać tylko parę bloków albo na jsfiddle.com wrzucić fragmetn co się psuje
MaxGaming (1:15, 15.02.18):
Już mam w sensie że doszedłem sam gdzie jest błąd
MaxGaming (1:14, 15.02.18):
Już mam. Nie chodzi o kradzeż, po prostu robię portal do celów komercyjnych i zależy mi by nikt nie wedział zanim nie skończe co to za portal. Sam html i css jest bez wartości akurat
I am vader (0:14, 15.02.18):
Chwuila zaraz to naprawie.
gnysek (19:10, 14.02.18):
w wersji na androida chyba nikt nie wydał ?
PsichiX (16:14, 14.02.18):
smiejecie sie, ale to bylby achievement, zrobic najlepszego catch the clauna na swiecie
Ignatus (16:01, 14.02.18):
A co jeżeli to najlepszy kacz de klown w historii i zarobi wiecej niz hotline miami?
I am Lord (11:25, 14.02.18):
Ktoś robi kacz de klawna i wysyła na PW bo na pewno ukradnie
I am Lord (11:25, 14.02.18):
uwielbiam to na gmclanie xD
PsichiX (1:50, 14.02.18):
na forum temat zaloz, nie mysl nawet ze ktos by mial krasc cssa, skoro nie dziala a i css to opis materialu, a nie algorytm
MaxGaming (1:36, 14.02.18):
Mógłby mi ktoś pomóc znaleźć błąd w prostym CSSie? Wyślę na PW kod
Wojo (15:36, 13.02.18):
Gierka uspokok się
ANtY (12:19, 13.02.18):
nie mow o mnie za plecami, ok?
Wojo (12:02, 13.02.18):
I się rozwinęły gierki nie można się kłócić...
Wojo (12:02, 13.02.18):
Wiesz o kim mówię
Ignatus (11:20, 13.02.18):
Jak to nie.Zaczynalem od skool daze na c64, przez UFO na amidze 500 az po Fallouta 2 na PC ,zadne pozniejsze gry wiekszego wrazenia juz nie robio
Wojo (10:22, 13.02.18):
Co za babole ludzie wy nie zyliscie w czasach rozwoju gier a pierdzielicie bez sensu. Ja mam dopiero 9 lat i takich głupot nie pierdziele
gnysek (10:14, 13.02.18):
nie nie, babuleńki mówią "za Gierka to było lepiej"
PsichiX (23:03, 12.02.18):
no wlasnie wszyscy mowio na odwrot
Ignatus (22:04, 12.02.18):
A wszyscy mówio że ten Gierek to taki super był
Wojo (8:26, 12.02.18):
Gierka, przecież napisoł
I am Lord (7:24, 12.02.18):
co robisz?
exp (21:17, 11.02.18):
tak dzisiaj stwierdziłem, że gierka, którą robie od jakiegoś czasu to jednak do dupy jest
Chell (20:48, 11.02.18):
musicie mi uwierzyc
Chell (20:47, 11.02.18):
kumpel przedwczoraj puscil i teraz mi podpowiada
Chell (20:47, 11.02.18):
z rok nie slyszalem tenacious d, w podpowiedziach tez nie mialem bo bym se puscil
Chell (20:46, 11.02.18):
tej bez kitu, uwierzylem w to co pisal Vader
Wojo (19:02, 10.02.18):
Bo to nie jest zależne od gmclanu
Gibki Kaktus (0:44, 10.02.18):
Czemu? XD
ANtY (23:57, 9.02.18):
OBY NIGDY
Gibki Kaktus (22:38, 9.02.18):
Ciekawe kiedy jakieś info o wystawie na Pyrkonie dadzą
Nikas (19:32, 7.02.18):
Odbierałem to inaczej. Nieważne. TopHat też po prostu zmarł już dawno i nic z nim nie robiłem.
I am vader (16:38, 7.02.18):
No i elegancko
Wojo (9:57, 7.02.18):
Ja bym dal znizke dla vadera za konstrukcje z krytyki
I am vader (20:58, 6.02.18):
Przepraszam ze konstruktywną krytykę tak źle odbierasz
Nikas (18:20, 6.02.18):
No oczywiście, że nic lepiej się nie dało. Bo jak by się dało, to by się zrobiło.
gnysek (16:32, 6.02.18):
może jeszcze zniżki dla stałych klientów
gnysek (16:32, 6.02.18):
kupony rabatowe
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.
Copyright © 2002-2018. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017 {=|=} fable_inside();

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