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 45 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 184 dni temu
Beta
2024.400.0.543 • 2024.400.0.562
wydana  wczoraj
= IDE, = Runtime
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 Adriann
(~ostatnie 15 minut)
Discord
59 użytkowników online na discordzie:
Papaj, Kysiu, s..., Alice, Nitro Slav, Carl-bot, p..., Voytec, Jamabaiz (Matrix_), Dominator2v, GibkiKaktus, Grela, Wielki Druid, Add92, b..., Kowu, Kuzyn, OdrzuconyKrakers, Tival, Filyps, fervi, m..., Jayu, Radek Ignatów, Kalor, r..., Sporek, LadyLush, lethian, HappyOrange, MKP (GEM), Moldis, Pako, Arrekin, MagnusArias, yazaa, Domeen0, Tobi1Kenobi, Dyno, 🆅🅸🆃🅾74🅼, debil debilowski, Korodzik, Morro, 🧁Cupcake🧁, ZYGZAK, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, Miłosz, Marco, LeD, Ulti, m..., Tidżi, Mtax, Alkapivo, moeglich, Nikas, Krzysiek1250, Shockah, xVANiLL
Shoutbox
gnysek (20:44, 11.04.24)
Niektórzy dlatego wybierają GMEdit. Ale ja liczę na Code Editor 2, tylko na razie zbyt zbugowany jest.
Tymon (16:11, 11.04.24)
Stitch dla mnie osobiście jest lepszy bo nie musze kopać się z interfejsem GMa i mogę tylko pisać kod.
Tymon (16:05, 11.04.24)
Yes. Obecny nie jest taki zły, jak zainstalowałem najnowszą stabilną to w porównaniu z tym czego używałem... 10 lat temu...? Wszystko wydaje się lepsze.
gnysek (22:48, 10.04.24)
bscotch/stitch ? Ja czekam na fixy do nowego edytora, bo wszystko wydaje się dziś lepsze od tego obecnego :D
Tymon (19:54, 10.04.24)
Hm, Stitch okazuje się całkiem dobrą alternatywą dla wbudowanego edytora
Wojo (22:16, 08.04.24)
siemano huder myślałem, że zniknąłeś całkiem z gmclanu bo na discordzie cie nie ma :D
I am Lord (00:37, 05.04.24)
O dzięki :D
gnysek (09:58, 02.04.24)
Znalazłem na podstawie jego postów: youtube.com/@Jakim_
I am Lord (20:16, 01.04.24)
Ktoś ogarnia jakie konto miał Jakim na YT?
gnysek (16:07, 29.03.24)
Nowy Edytor kodu jednak po świętach
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?