Zmienne w GM

Klikipedia - klikowa encyklopedia
Skocz do: nawigacji, wyszukiwarki
Autor.jpg
Autorem tego artykułu jest
Tymon

Czym jest zmienna? Jest to jakieś określone miejsce w pamięci komputera o określonej wartości, tekstowej bądź liczbowej. Artykuł ten pokaże, jak ze zmiennymi radzi sobie Game Maker.

Definiowanie

Za pomocą GMLa możesz definiować własne zmienne, wygląda to tak:

<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:

wysokość = 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:

imie='Jasio';
lat=lat+10;
biezacy_rok=2005;
rok_urodzenia=biezacy_rok-lat;

i tak dalej

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 zamiast pisać:

lat=lat+10;

można w prostszy sposób:

lat+=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 zostało wspomniane, są 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ć np. tak:

//Definiuje nowe zmienne
lat=10;
imie='Jasio';
//Zmieniam ich wartość
lat='Jakieś 10 lat';
imie=0;

Wyskoczy wtedy błąd i zakończy się działanie gry. 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 języka GML.

Zasięg zmiennych

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 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 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.

Zmienne globalne

Są też zmienne globalne które dotyczą wszystkich obiektów. Ich definiowanie wygląda tak:

global.wiek=10;
global.imie='Pietruś';

Odwołać się do zmiennej można tak samo :

nowa_zmienna=global.jakas_globalna;

Zmienne lokalne

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: kod:

var zmienna_1, zmienna_2, ... zmienna_n;

var mówi że te zmienne mają być skasowane po wykonaniu kodu.