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
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 (15:04, 2.11.2006)

while = dopóki

av

Maximal (15:40, 2.11.2006)

Łał, geniusz z Ciebie

av

Marmot (20: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 (8:01, 3.11.2006)

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

av

Matthew (15:03, 3.11.2006)

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

av

Markuz (15: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 (17:42, 28.06.2010)

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

av

gnysek (18:05, 28.06.2010)

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

av

Markuz (6:03, 29.06.2010)

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

av

Tymon (7:08, 29.06.2010)

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

av

Garry692 (9:06, 29.06.2010)

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

av

PolskiFrancuz (7: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 (9:29, 10.04.2012)

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

av

PolskiFrancuz (14:06, 10.04.2012)

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

av

Tymon (21: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
hgter, Adriann
Użytkownicy na czacie discord
I am Lord (10:06, 15.10.17):
A dobra widzę teraz że ten drugi router w trybie acces point ma zablokowane opcje konfiguracji firewalla, czyli działa tylko ten pierwszego routera
I am Lord (10:04, 15.10.17):
Podłączyłem ze sobą 2 routery po kablu. Oba nadają Wifi pierwszy router funkcjonuje zwyczajnie jako router a ten drugi jako acces point i teraz pytanie czy mam 2 firewalle?
PsichiX (14:48, 11.10.17):
poprawilem
gnysek (12:50, 11.10.17):
gobarbra.com/hi...2e9735f81eacc5e dzika wixa !
gnysek (7:34, 11.10.17):
tam jest jakiś błąd javascriptowy, chyba spowodowany google analytics - po przeniesieniu serwera sie tym zajmę (czyli po weekendzie).
Ignatus (20:04, 10.10.17):
U mnie często też tak jest-i nie ładuje się w ogóle.Za którymś podejściem dopiero
PatrykPlayingPOLSKA (19:40, 10.10.17):
Czy tylko u mnie otwieranie poprzednich stron tematów trwa w nieskończoność.Nie wiem czym może być to spowodowane,ale wątpię że to przez internet,sprawdzałem na wielu urządzeniach i wszędzie się otwiera naprawdę długo.
I am Lord (15:39, 10.10.17):
DS mają swoje funkcje do zapisywania
Adriann (15:05, 10.10.17):
Nie mogę otworzyć poprzedniej strony na forum
Uzjel (12:55, 10.10.17):
Niestety, ale to jedna z tych rzeczy "o których trzeba było pomyśleć wcześniej"
Ignatus (11:40, 10.10.17):
Kurcze klapa bo nie zapisuje w ten sposob DS i wywala błedy a ze względu na dynamiczne oświetlenie nie ma w ogóle opcji żeby to ręcznie ogarnąć..Znacie jakiś dobry sytem save, nawet płatny?
Ignatus (9:21, 10.10.17):
Potrzebuje prosty save checkpoint przed spotkaniem z bossem.Powinienem wybrać game_save() ,game_save_buffer() czy coś zupełnie innego?? Zapisywanie 1000zmiennych w autorskim systemie nie wchodzi w grę bo to przerost formy.Czym się różnią te systemy?
gnysek (8:07, 10.10.17):
trzeba po prostu dać w grze opcję przekonfigurowania klawiszy na padzie
Threef (5:46, 10.10.17):
Czyli GM obsługuje to tak samo jak kierownice, drążki, joysticki i tanie pady
Threef (5:46, 10.10.17):
To jest DirectInput. Problem to tylko koniguracja klawiszy bo każda może mieć inne
PsichiX (20:38, 9.10.17):
ta mata uzywa standardowego protokolu HID z layoutem dla gamepadów - obsłużysz je tak samo, jak buttony byle pada
Ignatus (20:33, 9.10.17):
Threef: Minotour był naprawdę zabawny;p Jak ogarnąłeś matę w GM? Chyba że to nie GM..
ANtY (8:04, 9.10.17):
wybuch jak wybuch, szczegolnie jak Ignatus napisał na statycznym ssie. Ale trawa i ogólnie enviro cieniutko wygląda
Ignatus (6:13, 9.10.17):
i gdzie ta wersja do grania w zapowiedziach?
doctor (21:11, 8.10.17):
Możecie też "chore game makery znalezione przez ferviego"
doctor (21:00, 8.10.17):
Zróbcie subforum dla Enigmy, a nie
PsichiX (20:50, 7.10.17):
bedzie dzis wrzucona wersja do grania w zapowiedzi
Ignatus (20:46, 7.10.17):
ok,ale ponawiam poprzednią wypowiedź- particle można ocenić tylko w ruchu
PsichiX (18:22, 7.10.17):
nowe wybuchy media.discordap...-explosions.png
Chell (14:37, 7.10.17):
jeden z konkursow PGG nie działał to na szybko zrobiłem w gmie w 15 minut zamiennik, człowiek warga w nim udział, mój największy devowy sukces
Gibki Kaktus (20:58, 5.10.17):
Za rok
ANtY (20:15, 5.10.17):
gibki bedziesz na PGA?
Gibki Kaktus (14:33, 5.10.17):
Szkoda, że xp nie ma, jakoś najbardziej jego lubię
I am Lord (14:28, 5.10.17):
Kupiłem żeby sobie powspominać stare czasy przed game makerowe
Gibki Kaktus (14:10, 5.10.17):
O to jednak nawet funta nie wydam na to xD
gnysek (13:36, 5.10.17):
O, nowa wersja GMS2 wyszła.
gnysek (8:21, 5.10.17):
O, jednak grafiki z RTP maja licencję na użytek jedynie w RPG Makerze. Trochę sprawa
Gibki Kaktus (23:22, 4.10.17):
Aż chyba się wykosztuję i dam te niecałe 6 funtów, żeby mieć powyżej średniej xD
gnysek (21:55, 4.10.17):
Dobrze rozumiem, że skoro mam licencję na RPG Makera, to mogę jego grafiki w GM Studio użyć do własnej gry, bo mam licencję ?
I am Lord (21:45, 4.10.17):
W bundlu jest RPG maker
Chell (7:13, 4.10.17):
do uslug
Gibki Kaktus (6:58, 4.10.17):
Chell, poprawiłeś mi humor przed robotą
Chell (22:33, 3.10.17):
niewazne w sumie
Chell (22:32, 3.10.17):
niezwiazany ze wczesniejszym kontekstem
Chell (22:32, 3.10.17):
to byl tylko tescik, bo teraz mi sie przypomnialo ze bylo serduszko, ale nigdy nie pod intuicyjnym <3 tylko jakims wlasnie dziwnym
Chell (22:31, 3.10.17):
:heart:
Chell (22:31, 3.10.17):
zawsze mogłem, teraz mam większą siłę przebicia
Threef (22:00, 3.10.17):
Chell. To że jesteś w końcu częścią PGG to nie znaczy że możesz lizać tyłki innym userom gmclanu xD
Chell (21:24, 3.10.17):
Adriann, ANtY i Boad - ze strony pgg questa wroze sukces, wszyscy 3 jestescie na prawie szczycie listy gier do obskoczenia <3
Saus (15:20, 3.10.17):
Ale macie super nowe forum :o
Tymon (14:33, 1.10.17):
gnysek, to było tak dawno.
gnysek (7:58, 1.10.17):
aaa, chodzi o to, że dwukropek i p się nie zmieniły w język
gnysek (7:57, 1.10.17):
Tymon, sam pisałeś ten skrypt od emotek, on jest wrażliwy na duże/małe litery
Tymon (21:24, 30.09.17):
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-2017. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus, © 2017 {=|=} fable_inside();

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