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.11.0.179 • 2024.11.0.227
wydana  3 dni temu
LTS
2022.0.3.85 • 2022.0.3.99
wydana 19 dni temu
Beta
2024.1100.0.713 •
2024.1100.0.726
 0.14.0

wydana 11 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
15 użytkowników online na discordzie:
Carl-bot, Andrzej Apparition, Kowu, LadyLush, GMRussell, PhysX ᴺⱽᴵᴰᴵᴬ, RogerDodg3r, Dyno, szmalu, bagno, Tidżi, Danieo, l..., s..., Shockah
Shoutbox
Uzjel (20:17, 10.12.24)
Cały ruch przeniósł się na Discorda.
MagnusArias (17:43, 01.12.24)
O matko... a ja tutaj jestem od ponad 15 lat i czasami zaglądam... biernie bo biernie, ale czasem wpadnę
gnysek (11:46, 17.11.24)
Witamy, witamy!
baca (12:22, 16.11.24)
To już 25 lat.. Witam po paru latach nieobecności.
gnysek (11:05, 15.11.24)
Natomiast obecne forum istnieje od 2004, jak z iglu.cz na gmclan.org przeszliśmy i od tego czasu nie było resetów danych.
gnysek (12:35, 13.11.24)
Ogólnie GMCLAN istnieje 22 lata, ale na to trofeum nie zrobiłem (jeszcze xD)
Chell (20:41, 08.11.24)
wow, ta emotka w ogóle nie wygląda jak : O xD
Chell (20:40, 08.11.24)
tylko? :O 4tk ma 15
Borek (18:12, 07.11.24)
Właśnie dostałem powiadomienie z forum, że jestem na GMClanie 18 lat :D Ja pierdzielę...
S
Sutikku (08:43, 18.10.24)
TIL, gamemaker jest starszy ode mnie
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?