Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Akademia GMCLANu
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy dla początkujących
Treść artykułu
Zmienne lokalne, globalne i tymczasowe.
autor: gnysek (23.12.10)
Zmienne w GM można podzielić na 3 typy: tymczasowe, lokalne i globalne.

Zmienne globalne:

Zmienna globalna to taka, która dostępna jest dla wszystkich obiektów w jednym jej egzemplarzu. GM posiada kilka wbudowanych zmiennych globalnych, np. fps - liczba klatek na sekundę jest jedna dla całej gry. Nie ma innej liczby klatek dla jednego obiektu, innej dla drugiego - z każdego obiektu uzyskamy tą samą wartość w danej chwili.
Własne zmienne globalne poprzedzamy słowem global oraz kropką, po której następuje nazwa tej zmiennej.
Można też użyć słowa globalvar a po nim wypisać zmienną (lub zmienne po przecinku) i nie potrzeba wtedy poprzedzać ich słowem global., niestety zapis taki może nam utrudnić pracę z grą - za tydzień możemy już nie pamiętać, że dana zmienna była globalna, lub lokalna, bo jej zapis o tym nie świadczy - podaję to raczej jako ciekawostkę. Aby oszczędzić sobie nerwów, zawsze pisz global. przed zmienną.
Zmienne globalne od momentu zdefiniowana są dostępne w grze aż do jej wyłączenia i nie resetują swoich wartości gdy zmieniamy plansze.

Zmienne lokalne:

Zmienne lokalne to takie, które istnieją tylko w danej instancji obiektu. W związku z tym, mając na planszy np. 5 obiektów przeciwnik, każdy egzemplarz (instancja) posiada te same zmienne, ale inne wartości. Inaczej mówiąc, ustawiając jakąś własną zmienną z góry wiemy, że zmienna o takiej nazwie w tym obiekcie istnieje - ale każdy egzemplarz tego obiektu może mieć inną wartość. Np. może to być zmienna energia. Na początku (w create) ustawiamy ją w obiekcie przeciwnik na 100, ale przy kolizji z nabojem odejmujemy 10. W tym momencie jeden z egzemplarzy obiektu przeciwnik na planszy może mieć 90 energii, a inny 60. Oba mają zmienną o tej samej nazwie, ale oba posiadają swoją własną (lokalną) wartość.
Tych zmiennych nie poprzedzamy niczym. Musimy je po prostu zdefiniować (czyli podać wartość początkową) przed pierwszym użyciem w warunku, lub operacją matematyczną jak dodawanie, odejmowanie itp. Zmienne lokalne znikają wraz z eventem destroy, lub z końcem planszy (wtedy niszczone są wszystkie obiekty bez opcji persistent, więc ich dane są usuwane).

Zmienne tymczasowe:

Zmienne tymczasowe to takie, które istnieją (jak sama nazwa mówi) tylko przez pewien czas. Używamy ich np. do jakichś tymczasowych obliczeń, czy przypisania pewnych wartości które potrzebujemy w danym kawałku kodu kilka razy (np. odległość między dwoma punktami, na podstawie której wykonane są jakieś akcje) - najczęściej są pewnym rodzajem bufora który pomaga nam przetrzymać coś przez chwilę w pamięci, lub ograniczyć wywołanie jakiejś funkcji aby nie przeciążać gry.
Zmienne tymczasowe mogą działać w dwóch zakresach: całego skryptu, lub klocka z kodem, lub też tylko w bloku kodu (tzn. pomiędzy znakiem { i } na wszystkie jego podbloki). Gdy dany blok, klocek z kodem lub skrypt kończą się, zmienna nie jest więcej dostępna.
Zmienne tymczasowe definiujemy poprzez var, a następnie po spacji nazwa (lub kilka po przecinku). Warto pamiętać, że wartość możemy (i musimy przed użyciem) przypisać im dopiero w kolejnej linijce.
Kolejną ważną rzeczą jest informacja, że zmienna tymczasowa jest dostępna również w instrukcji with pomimo wykonywania kodu w innym obiekcie, tzn. hipotetycznie załóżmy, że mamy obj_obecny i obj_inny i wywołujemy kod w tym drugim za pomocą with:

gml:
var _zmienna;
_zmienna = 10;

with (obj_inny) {
if (x == _zmienna) then {}
}


Jak widać, mamy dostęp do zmiennej tymczasowej, pomimo, że nie należy ona do tego obiektu. W przypadku gdyby była to zmienna lokalna, należało by napisać obj_obecny.zmienna, lub other.zmienna, aby uzyskać wartość zmiennej z pierwszego obiektu w tym drugim, a nie do własnej zmiennej tego drugiego.
Można więc w skrócie powiedzieć, że zmienna tymczasowa jest zmienną o zasięgu globalnym która znika wraz z zakończeniem bloku kodu, lub danego skryptu. Ponieważ kod obiektów jest wykonywany jeden po drugim (chociaż tak szybko, że mamy wrażenie, iż dzieje się to w tym samym momencie), to zmienne te nie przeszkadzają sobie wzajemnie.
Przykładem użycia zmiennej tymczasowej jest np. otworzenie jakiegoś pliku z którego czytamy tekst - potrzebujemy mieć uchwyt na ten plik który zwraca funkcja, ale przecież nie potrzebujemy go przez np. 10 godzin trwania gry, tylko raz, przez ułamek sekundy, gdy odczytujemy plik. W tym przypadku, zmienna tymczasowa dostanie uchwyt na plik, a na końcu danego skryptu zniknie i nie będziemy mieć już na ten uchwyt dłużej dostępu.
Znak _ przed nazwą nie jest potrzebny, ja używam go aby odróżnić te zmienne od lokalnych gdy wracam do kodu po długiej przerwie.
Jeszcze jedna informacja - jeżeli w kodzie wywołamy jakiś skrypt, a zmienna tymczasowa istniała,to będzie ona dostępna również w tamtym skrypcie, więc te zmienne są dziedziczone - tak jak mówiłem, są tymczasowo globalne.


PODSUMOWANIE:

Zmienna globalna: np. global.zmienna = 1; - dla wszystkich obiektów jest to ta sama zmienna, zmieniając ją z jednego obiektu inne odczytają tą nową wartość.

Zmienna lokalna: np. zmienna = 5; - pomimo tej samej nazwy, każda kopia obiektu może mieć inną wartość.

Zmienna tymczasowa np. var _zm; _zm = 5; - nie można się do niej odwołać z innego obiektu i istnieje tylko od miejsca w którym ją zdefiniujemy, do końca okienka w którym aktualnie piszemy kod, lub, jeśli występuje po znaku { do znaku } który tę pierwszą klamerkę zamyka, i nie przechodzi pomiędzy klockami/skryptami itp.


Porównując to z programowaniem obiektowym, zmienna globalna to właściwość klasy statycznej global, lokalna to publiczna właściwość instancji (obiektu) klasy, a tymczasowa to zmienna użyta w metodzie.
głosów: 8 | ocena: 8.63 oceń zasób | dodał: gnysek
Komentarze
stron: 1

1


av

I am Lord (22:49, 23.12.2010)

globalvar wth, skąd o tym się dowiedziałeś?

av

Shockah (22:53, 23.12.2010)

Ja tam już od wieków używam globalvar.

av

gnysek (22:58, 23.12.2010)

Przez przypadek zobaczyłem w jakimś artykule albo przykładzie Marka Overmarsa.

av

I am Lord (22:59, 23.12.2010)

W sumie może być przydatne jak by się nazwało takie zmienne z jakimś przedrostkiem ( np. glCostam ). Zawsze mnie wnerwiało że muszę pisać global.costam bo jestem leniwy i wolę krótkie zmienne, które się szybciej pisze. Od teraz będę robił globalne z użyciem globalvar.

av

gnysek (23:01, 23.12.2010)

ja mam w almorze obiekt, który mi ustawia vx i vy i to są moje aliasy do view_xview[0] itd., zeby tyle nie pisać, a tam trochę rzeczy tego uzywa. W innych miejscach tego unikam, dla bezpieczeństwa i zeby sie nie pomylić. Myślę, że 2-3 zmienne w całej grze korzystające z globalvar to maks., dla nie zaciemniania kodu.

av

sunflower (12:18, 24.12.2010)

Podoba mi się ten artykuł, nawet niespodziewanie się dowiedziałam czegoś nowego (globalvar), nawet jeśli nie zamierzam z tego nadmiernie korzystać (choć miejscami faktycznie może się przydać). Poza tym podoba mi się pomysł poprzedzania nazw zmiennych tymczasowych podkreślnikiem dla odróżnienia od lokalnych.

av

Platyna (17:47, 25.12.2010)

Niesamowite. Nawet ja się czegoś nowego nauczyłem. Nigdy z tymczasowych nie korzystałem, bo nie widziałem, ze tak działają w połączeniu z with więc zawsze używałem globali do takich zadań.

av

gnysek (9:54, 27.12.2010)

Platyna, ja się o tym with dowiedziałem z pół roku temu, bo też korzystałem z globalnych

av

Mentoss (17:02, 8.01.2011)

hehe... globalvar to bardzo ciekawa informacja. Co do przedrostków - w większosci kodu i tak oznaczam zmiennne tymczasowe przez v_zmienna bądź _vzmienna, a skrócenie global. do g_ będzie dobrą opcją...

av

Muuuuczek567 (17:20, 8.01.2011)

Ja to wszystko wiedziałem przed przeczytaniem tego artykułu. Ale jeśli nawet Platynie się przydał...

av

baca (12:39, 16.01.2011)

Nie jest sztuką znać, sztuką jest umieć użyć.

av

kt1117 (21:17, 17.01.2011)

Ja tam używam prawie samych globalnych, nie trzeba potem kombinować i szukać gdzie się daną zmienną zadeklarowało (chyba że deklaruje ją w skrypcie).

av

pablo1517 (1:55, 27.03.2011)

Co do przedrostków, to ja jak "pracowałem" kiedyś z tymonem to przybrałem sobie jego nawyk robienia _____zmienna xD itp

av

Mentoss (11:13, 27.03.2011)

Pięć podłóg? Domek sobie budujesz? Uważaj, bo Ci desek zabraknie

av

gnysek (11:20, 27.03.2011)

W obiektówce często właściwości i metody prywatne mają podłogę przed nazwą, bo łatwiej je wtedy odróżnić.

av

Tymon (14:09, 27.03.2011)

Ja akurat tymczasowe oznaczam różnie. Przeważnie coś w stylu t_..., czy po prostu __..., sposobów jest wiele, każdy woli inny.

stron: 1

1



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
14 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 14, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
Wojo (15:09, 17.06.18):
chociaz elektroda jest o wiele gorsza
Wojo (15:09, 17.06.18):
tez ma swoje głupie zasady ale nie jest jakiś zwariowany
exp (14:35, 17.06.18):
tylko gmclan jest niezastąpiony
Wojo (13:44, 17.06.18):
youtube lubię ale czasami robi głupie akcje.
Wojo (13:44, 17.06.18):
gg i fora zastąpił facebook oprogramowanie mobilne zastąpił android, video google zastąpił youtube
Wojo (13:42, 17.06.18):
Chociażby ten przykład z lombardem. Większość sklepów na allegro ma numer gg na którym odpowiada na pytania
Wojo (12:40, 17.06.18):
Właśnie vader ma rację
gnysek (12:37, 17.06.18):
GG? Chyba slack.
Wojo (9:19, 17.06.18):
Tzw. MICROsoft
Chell (9:13, 17.06.18):
z tego co pisał wojo chodzi o firmy jakichś zboczuchów
I am vader (2:19, 17.06.18):
GG jest używane w sferze biznesowej do kontaktów wewnątrz i poza firmą.
Wojo (20:53, 16.06.18):
w 2018 uzywam gg ja, kolega i jakieś zboczuchy
exp (20:45, 16.06.18):
ale czasem tu zaglądam, nawet zacząłem robić dwie gierki, ale po czasie stwierdzałem, że jednak słabe to było. ale może niedługo zacznę kolejną, bo mam pomysł
exp (20:44, 16.06.18):
chociaż o gmclan można by powiedzieć to samo xdd
exp (20:44, 16.06.18):
jakoś tak, w sumie nie wiedziałem, że ktoś jeszcze używa gg w 2018
Wojo (20:39, 16.06.18):
w ogole czemu z gg zrezygnowales? Ostatnimi dni siedzę głównie tam i dostępny jest tylko kumpel i lombard
Wojo (20:38, 16.06.18):
też jestem tego zdania exp
exp (20:38, 16.06.18):
do tego po prostu trzeba mieć odpowiednie ciało i stylówę, jak max mówił
exp (20:37, 16.06.18):
tak jak mówiłem, znaczna większość mężczyzn, zwłaszcza w naszym wieku wygląda bardzo źle z długimi włosami i jest traktowania mniej poważnie, o dziewczynach nie wspominając
exp (20:35, 16.06.18):
ja też bardzo, bardzo długo zanosiłem się, żeby ściąć włosy i było kilka podejść. ale koniec końców uważam, że to była bardzo dobra decyzja
Wojo (19:17, 16.06.18):
i nie jest to zmyślona historia
Wojo (19:13, 16.06.18):
moj kolega miał dziewczynę, która była wszędzie i u każdego (jeśli wiesz o co chodzi). Jestem przekonany,że nie była z nim dlatego, że ma dużo forsy tylko dlatego, że to poukładany typek
MaxGaming (18:47, 16.06.18):
Ja jestem tego zdania że np jak ktoś ma takie marudne podejście do życia to ja się nie denerwuje tylko co najwyżej próbuje mu pokazać że można myśleć inaczej
MaxGaming (18:46, 16.06.18):
To kwestia drobnego ogarnięcia np ścięcia włosów ale głównie tego żeby pozbyć się blokady że taki ktoś jak ja nie może mieć dziewczyny
MaxGaming (18:45, 16.06.18):
Bo prawda jest taka że wszyscy którzy chcą mieć dziewczynę a nigdy nie mieli to mają głównie problem w głowie. Na prawdę znam typów którzy wyglądają jak sto nieszczęść a mają dziewczyny wyglądające genialnie.
MaxGaming (18:44, 16.06.18):
Nie no żarty żartami ale serio nie ma co tak gadac
Wojo (18:42, 16.06.18):
Max ale pamiętaj, że trzy razy zero to wciąż zero
MaxGaming (18:35, 16.06.18):
Chell ale ja tam dopisałem że chodzi o osoby które same nie czują się dobrze ze swoich wyglądem ale jakby przez brak pewności siebie oburzają się na chęć pomocy, a nie o takich które chcą mieć w 100% świadomie długie włosy
MaxGaming (18:33, 16.06.18):
Że to była dobra decyzja
MaxGaming (18:33, 16.06.18):
I serio ja się nie dziwię vaderowi. Nie każdy jest przyzwyczajony do zmian, niektórzy się bardzo boją. Ale moja rada jest taka żeby za bardzo nie kombinować, nie podchodzić tak idealistycznie tylko ściąć jej. Jak ci się akurat ta krótka fryzura nie spodoba to do innej krótkiej będziesz nie długo czekał. Na pewno wśród osób które cię od zawsze znają w długich będziesz mógł się na początku czuć nie swojo ale jak zobaczysz że obcy ludzie zupełnie inaczej na Ciebie r
MaxGaming (18:31, 16.06.18):
No to że takie marudzenie potrafi być denerwujące okej, ale ten cala akcja z wyglądem Vadera to nie zbyt była fajna.
MaxGaming (18:29, 16.06.18):
Nie wiem może chłopaki mają jakąś większą spine o której nie wiemy no ale wygląda to źle ze strony gnyska
MaxGaming (18:29, 16.06.18):
Kiedyś jak byłem mniej pewny siebie też tak miałem. Aa bo pomyślą że jestem taki jak ta osoba(tzn jaki?) I wgl. A teraz już dawno takimi rzeczami się nie przejmuje
MaxGaming (18:28, 16.06.18):
I nie gadajcie że jest jakimś alfa. Jak ktoś nie chce się pokazywać z kimś kto wygląda na kuca to świadczy o jego braku pewności siebie. Ja teraz mam gdzieś takie coś. Jak ktoś jest spoko to dlaczego miałbym go oceniać dlatego że wygląda tak a nie inaczej
MaxGaming (18:27, 16.06.18):
No gnysek trochę nie ładnie zagrał. Mówi do niego koleżka jeszcze coś tam że chce się z nim zobaczył a on ciśnie
MaxGaming (18:26, 16.06.18):
Za to obciąłem się na patola kiedyś tak na 1 mm cała głowa
MaxGaming (18:25, 16.06.18):
Ja takich typowi długich nigdy nie miałem
MaxGaming (18:25, 16.06.18):
Ale tak poważnie jako motywację powiem że ścięcie włosów na krótko to przynajmniej 3x większe szanse na zainteresowanie sobą jakiejś kobiety. W sumie mało kto ma długie włosy i ma dziewczynę. Chyba że ma długie ale rzeczywiście jest to część jakiejś fajnej styluweczki
MaxGaming (18:24, 16.06.18):
Pomyślcie o tych laskach które tylko czekają aż zetknięcie włosy xd
exp (18:19, 16.06.18):
no i zakola skurwysyn najgorszy
exp (18:19, 16.06.18):
z kształtem głowy niestety prawda, m.in. przez to zdecydowałem się mieć trochę dłuższe włosy
exp (18:18, 16.06.18):
chociaż np. george carlin wyglądał z tym spoko nawet
Wojo (17:37, 16.06.18):
niektorzy nie potrafia sie pogodzic z tym ze lysieja wiec zapuszczaja wlosy i wyglada to komicznie
Wojo (17:36, 16.06.18):
no i zalezy tez od tego jaka kto ma linie wlosow i czy ma zakola
Wojo (17:36, 16.06.18):
typ fryzury nalezy tez dopasowac do ksztaltu glowy a to moze byc niepocieszjace dla niektorych
exp (16:55, 16.06.18):
ale to naprawdę bardzo, bardzo niewielu facetów może sobie na to pozwolić. a i tak sporo z nich wyglądałoby lepiej bez nich
exp (16:54, 16.06.18):
długie włosy może mieć mężczyzna wysoki i dobrze zbudowany, najlepiej jeszcze z zarostem. taki barbarzyńca będzie zawsze zwilżał damską bieliznę
Wojo (16:54, 16.06.18):
no ja podobnie miałem ale łysość to wygoda przede wszystkim
exp (16:52, 16.06.18):
co do długich włosów, ja zawsze i wszędzie będę zachęcał do ścinania ich
exp (16:49, 16.06.18):
miałem podobnie, z tym że jak miałem długie włosy, to parę razy dostałem komplementy, natomiast jak goliłem sie na rekruta to już nie
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2018. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2018 {=|=} fable_inside();

[ Czas generowania strony: 0.02129 sekund ] [ Liczba zapytań MySQL: 13 ]