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 16 - 30):
Y
Yoda (Nie., 26 Sie. 07, 22:29)
#16

Że jeśli zmienna równa się 0 to speed ustawia się na 4 :] Pamiętaj że wartości zmiennych nie wynosza tylko 1 i 0 mogą wynosić równie dobrze 50 albo 100... a do prawda/fałsz używaj true/false - łatwiej zrozumieć na początku :P

p
pablo1517 (Pon., 27 Sie. 07, 01:57)
#17

prawda i fałsz to 1 i 0 dla komputera, napisy true i false to zwykłe stałe, właściwie takie same jakie mozecie sobie ustalić w ustawieniach gry, w zakładce CONSTANS :P zapraszam do działu "stałe" po dalsze wyjaśnienia.

Tymon (Pon., 27 Sie. 07, 09:03)
#18

W GM jest dość ciekawie, liczby ujemne i 0 to false, a dodatnie to true. :)

p
pinker (Wto., 28 Sie. 07, 22:15)
#19

No ja jestem nobkiem a jednak cos mi powpadału juz do mózgu a wcześniej nic nie mogło wpasc

c
chichako (Pią., 10 Kwi. 09, 10:46)
#20

a ten kod o tym jasiu to jaką zmianę wprowadzał w grę bo sprawdzałam i nic się nie zmieniło

gnysek (Pią., 10 Kwi. 09, 13:20)
#21

dodał zmienną ?

kt1117 (Wto., 02 Lut. 10, 15:07)
#22

A poco te zmienne bo nie kumam

ZeroXbot (Wto., 02 Lut. 10, 15:11)
#23

o_O ?!! Po co?! Zmienne są po to by przechowywać rozmaite dane i na nich operować. Takie np. direction, czy speed to wbudowane zmienne i według ich wartości obiekt rusza się z daną prędkością w danym kierunku. Reszta w kursie...

g
gothicner (Czw., 18 Lut. 10, 15:50)
#24

Mam male pytanie. Jesli mam zmienna zycie1=100 to co mam zrobic zeby object posiadajacy ta zmienna zmienil sie w inny object?

g
gothicner (Pią., 19 Lut. 10, 09:49)
#25

sorki ze nie dokonczylem. ... w inny object gdy zmienna zycie1 dojdzie do zera?

l
lenin (Pią., 19 Lut. 10, 09:55)
#26

if zycie1<=0
{
instance_create(x,y,obj_nowy)
instance_destroy()
}
Daj to w step

mentos_96 (Pią., 19 Lut. 10, 10:01)
#27

w kodzie obiektu, który ma się zmienic wpisz (w stepie)

if zycie1=0
{instance_change(i tutaj to, czego potrzebujesz)}

________________
na klockach:

klocek1: control / variables / test variable -> self; variable: zycie1; value:1; operation:smaller than; nie zaznaczasz NOT;


klocek2: main1 / objects / change instance-> self; wybierasz obiekt docelowy; wybierasz istnienie perform event'u (sam do końca nie wiem o co w tym performevencie chodzi :D)

l
lenin (Pią., 19 Lut. 10, 10:09)
#28

nie polecam instance_change, czasami jakieś głupie problemy się z tym robią. Bezpieczniej jest dać instance_create i instance_destroy()

mentos_96 (Pią., 19 Lut. 10, 10:19)
#29

na kodzie racja... ale na klockach działa.

E
Egzekutor (Pią., 19 Lut. 10, 11:26)
#30

Omg a co to za różnica czy na kodzie czy na klocku ... ;/ Tu i tu czasem coś nie działa nie warto ryzykować.

Najnowsze wersje GameMakera:

Stabilna
2024.14.4.222 • 2024.14.4.268
wydana 89 dni temu
LTS
2026.0.0.16 • 2022.0.3.99
wydana 35 dni temu
Beta
2026.100.0.1083 •
2026.100.0.1046
 0.20.0

wydana  dziś
= IDE, = Runtime, = GMRT
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 Borek
(~ostatnie 15 minut)
Discord
44 użytkownicy online na discordzie:
Miłosz, Morti, 🧁Cupcake🧁, Alice, HappyOrange, LeD, Carl-bot, Sporek, Fox, Wielki Druid, Kuzyn, GMRussell, fervi, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, m..., 𝕯𝖎𝖆𝖓𝖆, PhysX ᴺⱽᴵᴰᴵᴬ, r..., Threef, RogerDodg3r, Uzjel, s..., Moldis, Pako, MIXZZZ, yazaa, Dyno, Deusald, szmalu, Morro, OdrzuconyKrakers, Ulti, Kandif, Danieo, bagno, Arrekin, Mtax, Voytec, szynka, Borek, moeglich, Add92, h..., Shockah
Shoutbox
Wojo (21:21, 28.06.26)
na ten moment czerwiec prezentuje się dość przyzwoicie jesli chodzi o ilosc wpisow w shoutboxie bo aż trzy! a taki styczeń zero :0
gnysek (15:06, 10.06.26)
oraz pokój na świecie
Kuzyn (17:16, 08.06.26)
i urlop
gnysek (11:13, 05.05.26)
czekamy na GMRT
Wojo (14:53, 04.05.26)
Co tak cicho?
gnysek (11:01, 30.04.26)
Grill panie, grill.
Wojo (14:18, 29.04.26)
Jak planujecie spędzić najbliższą majówkę?
Wojo (13:15, 13.03.26)
Ja zainstalowałem sobie Linux mint na swoim laptopie :)
Wojo (10:21, 12.02.26)
Tak, po zmianach gmclan przeżywa drugą młodość. Najnowsze trendy wskazują, że ten rok będzie rokiem Linuxa, rokiem odejścia od Facebooka i rokiem odejścia od discorda na rzecz forów internetowych B)
K
Kamilek (21:57, 08.12.25)
Ale klimat tu znowu wrócić! :-D
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?