Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

Zmienne w GM

Wtorek, 06 Grudnia 2005, 13:36
Czas czytania 4 minuty, 6 sekund
Zgodne z GM: gm5 gm6 gm7 gm8
Szybki kurs definiowania zmiennych, globalnych i tymczasowych oraz trochę o zmienianiu ich wartości.
Czym jest zmienna? Jest to jakieś określone miejsce w pamięci komputera o określonej wartości, tekstowej bądź liczbowej. Za pomocą GMLa możesz definiować własne zmienne, wygląda to tak:
kod<nazwa zmiennej> = <wartość>;I tutaj kilka uwag. W nazwie zmiennej nie mogą się znajdować spacje (zastępuj je znakiem '_'), nie mogą się znajdować w niej polskie znaki (zamiast 'ś' wpisz 's', zamiast 'ć' wpisz 'c' itd.) oraz nie może się zaczynać od liczby, a oto przykład kilku błędnie zdefiniowanych zmiennych:
kodwysokość = 100;
10osoba = 'Jasio';
ilosc lat= 9;
W dobrym zwyczaju leży też stawianie znaku średnika ';' po wartości choć nie jest konieczne.

W GML znajdziemy też stałe (wartości ich nie można zmienić) które są wpisywane do pamięci wraz ze startem gry. Są to:
true - prawda (1).
false - fałsz (0).
pi - wartość pi (3.1415...).
Dwie pierwsze z nich przydają się w operacjach logicznych z których będziemy dość często korzystać =]

Mamy zmienną ale jej wartość chcemy zmienić, jak? Wygląda to tak samo jak definiowanie ich. Czyli:
kodimie='Jasio';
lat=lat+10;
bierzacy_rok=2005;
rok_urodzenia=bierzacy_rok-lat;
itd. ;)

Zamiast znaku '=' możemy użyć jeszcze czterech innych:
-= - odejmuje od wartości zmiennej.
+= - dodaje do wartości zmiennej.
*= - mnoży wartość zmiennej.
/= - dzieli wartość zmiennej.
Używanie ich może być bardzo przydatne choćby ze względu skrócenia kodu bo możemy tak:
kodlat=lat+10;A możemy tak:kodlat+=10;Efekt jest ten sam a skróciliśmy troszkę kod. Pomyśl co będzie gdy nazwa zmiennej będzie miała 20 znaków długości ;)

Jak na początku wspomniałem mamy dwa typy zmiennych, tekstowe (string) i liczbowe (real). Trzeba pamiętać żeby do zdefiniowanych już zmiennych o jakimś typie (string bądź real) przypisywać wartość o tym samym typie, nie można zrobić tak:
kod//Definiuje nowe zmienne
lat=10;
imie='Jasio';

//Zmieniam ich wartość
lat='Jakieś 10 lat';
imie=0;Wyskoczy nam wtedy błąd i zakończy działanie gry, co nie jest nam potrzebne. Choć nie jest możliwe do wykonania coś takiego, możesz zrobić tak:
kod//Definiuje nowe zmienne
lat=10;
imie='Jasio';

//Zmieniam ich wartość
lat=real('Jakieś 10 lat');
imie=string(0);Tu już nie napotkamy błędu bo:
real(str) - zmienia wartość z string na real. Usuwa wszystkie znaki oprócz cyfr.
string(val) - zmienia wartość real na string.
Przydatne, będziemy później jeszcze z nich korzystać więc warto je zapamiętać. Jeszcze jedna informacja, real(str) i string(val) są funkcjami (o nich trochę więcej będzie później).

Teraz trochę o zasięgu działania zmiennych. Gdy zdefiniujemy zmienną w jakimś obiekcie to będzie ona dotyczyła tylko tego typu obiektów. Na przykładzie:
kod//Kod w obiekcie 'nr1'
lata=10;
//Kod w obiekcie 'nr2'
show_message(lata);Wywali nam wtedy błąd że obiekt 'nr2' nie ma zdefiniowanej zmiennej o nazwie lata. Jak więc zdobyć wartość zmiennej 'lata' z obiektu 'nr1' do 'nr2'? Jest coś takiego jak adresowanie do obiektów i wygląda ono tak:
<jakaś zmienna> = <nazwa obiektu>.<nazwa zmiennej>;
Zadziała to tak: zmienna o nazwie <jakaś zmienna> będzie miała wartość zmiennej <nazwa zmiennej> z obiektu <nazwa obiektu>. Możemy teraz poprawić kod:
kod//Kod w obiekcie 'nr1'
lata=10;
//Kod w obiekcie 'nr2'
show_message(nr1.lata);Wszystko zadziała jak trzeba. Przy okazji, funkcja show_message(str) wyświetla na ekranie komunikat o treści str =]

Są też zmienne globalne które dotyczą wszystkich obiektów. Ich definiowanie wygląda tak:
kodglobal.wiek=10;
global.imie='Pietruś';
Odwołać się do zmiennej można tak samo :
kodnowa_zmienna=global.jakas_globalna;Oprócz zmiennych i zmiennych globalnych mamy zmienne tymczasowe. Czasami musimy przechować jakąś informację i trzeba stworzyć jakąś nową zmienną ale kosztem stworzenia jej jest zmarnowanie miejsca w pamięci. Można by zdefiniować jakąś zmienną i ją potem skasować na końcu wykonywanego kodu i po to są te zmienne tymczasowe. Ich stworzenie wygląda tak:
kodvar zmienna_1, zmienna_2, ... zmienna_n;var mówi że te zmienne mają być skasowane po wykonaniu kodu.

To tyle jak na razie. W następnej części powiem trochę o warunkach a tymczasem wejdź do Game Makera i poćwicz trochę. Z czasem wszystko wejdzie ci samo do głowy =D
Komentarze (łącznie 30, wyświetlam 1 - 15):
Tymon (Wto., 06 Gru. 05, 13:49)
#1

Mój pierwszy artykuł :D Litości! :P

Ranmus (Wto., 06 Gru. 05, 18:27)
#2

Nie musiałeś przy okazji sobie samemu wystawić oceny. :]

B
Ojciec Rydzyk (Wto., 06 Gru. 05, 18:52)
#3

Solidny artykuł. Dostaniesz w nagrode Porche (do którego masz kluczyki).

Tymon (Wto., 06 Gru. 05, 21:24)
#4

Ranmus@ Masz mnie :P Ale chyba nikt na to nie patrzy ;) Chyba ...

B
Ojciec Rydzyk (Wto., 06 Gru. 05, 21:31)
#5

Pomijając tych wszystkich co nas oglądają codziennie to fakt, nikt na to nie patrzy. Można wypić herbatke w spokoju, hehe.

F
~Firemark-bez logu xD (śro., 07 Gru. 05, 09:11)
#6

oj Tymon,przecie jak wiem z wartosciami cie stac na wiecej! :D
gdzie x[y]?

Tymon (śro., 07 Gru. 05, 11:21)
#7

Tablice? Myślałem żeby napisać o tym odzielny kurs :P

Vianom (Czw., 08 Gru. 05, 16:49)
#8

Dobry ten poradnik

P
~Pablo1517 (Nie., 29 Sty. 06, 01:11)
#9

eh... nie chcialo mi sie logowac, owszem artykul dobry... a pamietam jak bylem noobem, nic bym chyba nie skumal :D. A teraz to taki artykul moglbym sam trzasnac a to wszystko w tak niewielkim czasie, glownie dzieki temu ze pisalem se z tymonem gierke (szkoda ze potem sie zniechecil i to zarzucil >:( ) i dlatego ze "czytalem Helpa!!" :D

guXio (Nie., 19 Lis. 06, 20:27)
#10

No może trochę kapuje już te zmienne ;p

A
ARTUR URBAN (Sob., 25 Lis. 06, 16:56)
#11

uczyłem sie Pascala przez całe ranki to wiem o zmiennych

Force (Czw., 04 Sty. 07, 13:55)
#12

wysokość = 100;
10osoba = 'Jasio';
ilosc lat= 9;

hej nie moga sie znajdowac polskie znaki popraw to :]

Tymon (Czw., 04 Sty. 07, 16:06)
#13

Gratuluje Ci :] Przeczytaj jeszcze raz.

Blackmaul (Czw., 04 Sty. 07, 16:23)
#14

yeah, man u rox, rlz, iohoho.
Hm, to była próba pochwalenia się wiedzą nabytą 2 linijki wcześniej, czy zwykła prowokacja żeby wszystkich rozbawić? :P

R
Rusek (Nie., 26 Sie. 07, 22:23)
#15

ej jak zmienna = 1 to prawda a jak 0 to falsz ?? tylko tyle chyba na razie kapuje bo nie chce mi się czytać. Ale ze mnie noob. A jak jest tak if (zmienna=0) {speed=4;} to co znaczy??

Najnowsze wersje GameMakera:

Stabilna
2024.2.0.132 • 2024.2.0.163
wydana 24 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 163 dni temu
Beta
2024.400.0.526 • 2024.400.0.547
wydana  wczoraj
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
45 użytkowników online na discordzie:
MKP, s..., Alice, Nitro Slav, Carl-bot, Sporek, p..., GibkiKaktus, SuperEnduro, 21Lancz, Kowu, Kuzyn, m..., YoungKrystian, Sevitaus, Radek Ignatów, PhysX ᴺⱽᴵᴰᴵᴬ, r..., antek, 🧁Cupcake🧁, Uzjel, PokojowyPatrol, lethian, HappyOrange, Moldis, Arrekin, yazaa, Dyno, 🆅🅸🆃🅾74🅼, Korodzik, ZYGZAK, debil debilowski, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, LeD, Ulti, LadyLush, bagno, Tidżi, g..., Alkapivo, Nikas, Krzysiek1250, Shockah, Cosplyfanka, xVANiLL
Shoutbox
I am Lord (19:15, 17.03.24)
6h mam na to hmmm
I am Lord (19:06, 17.03.24)
Ale temat fajny
gnysek (01:33, 13.03.24)
Powinno działać, jest w kodzie sortowanie wg. najbliższego startu :)
Uzjel (21:59, 11.03.24)
Nie, ale za pierwszym razem zrobiłem fuckup, że było "Tura testowa" X_X
I am Lord (16:58, 11.03.24)
A co Uzjel już masz nawymyślane 100 tematów? 😅
Uzjel (20:08, 10.03.24)
@gnysek a jak bym dodał kilka lig na raz to walnie?
Uzjel (20:08, 10.03.24)
Liga będzie zawsze od piątku 16:00 do poniedziałku 23:59, zawsze w środku miesiąca.
gnysek (08:48, 10.03.24)
Tak, to też jest do poprawy X_X
Adriann (18:22, 09.03.24)
Tylko myślę czy nie leiej gdyby mówiło że zostało tyle i tyle dni i ileś godzin a nie tylko w godzinach ;d Albo konkretna data obok, byłoby czytelniej
I am Lord (15:08, 08.03.24)
o super z tą ligą :)
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?