Nasze strony: gmclan.org gameonly.pl ps-plus.pl gameswithgold.pl n-switch.pl hmt.pl
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 GML
Treść artykułu
Zmienne w GM
autor: Tymon (6.12.05) | czas czytania: 4 minuty, 6 sekund
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:
gml:<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:
gml: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:
gml:imie='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:
gml:lat=lat+10;A możemy tak:gml: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 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:
gml://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:
gml://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:
gml://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:
gml://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:
gml:global.wiek=10;
global.imie='Pietruś';
Odwołać się do zmiennej można tak samo :
gml:nowa_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:
gml:var 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
głosów: 24 | ocena: 7.91 oceń zasób | dodał: Tymon
Komentarze
stron: 21

2


av

gnysek (13:20, 10.04.2009)

dodał zmienną ?

av

kt1117 (15:07, 2.02.2010)

A poco te zmienne bo nie kumam

av

ZeroXbot (15:11, 2.02.2010)

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

av

gothicner (15:50, 18.02.2010)

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

av

gothicner (9:49, 19.02.2010)

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

av

lenin (9:55, 19.02.2010)

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

av

Mentoss (10:01, 19.02.2010)

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 )

av

lenin (10:09, 19.02.2010)

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

av

Mentoss (10:19, 19.02.2010)

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

av

Egzekutor (11:26, 19.02.2010)

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

stron: 21

2



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

Nie masz konta? Zarejestruj się
Użytkownicy on-line
15 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 15, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
gnysek (0:07, 23.08.19):
Jaki GM?
exp (22:47, 21.08.19):
jak to wgl możliwe
exp (22:47, 21.08.19):
w ramach testu dodałem room bez niczego, dałem tylko "room_goto_next()" w creation code i błędy również występują
exp (22:46, 21.08.19):
natrafiłem na przedziwne zjawisko... kiedy dodaję do gry nowy room, losowe fragmenty kodu przestają działać albo działają inaczej
gnysek (0:15, 20.08.19):
O oknach wewnątrz gm, oczywiście
Konrad-GM (22:45, 19.08.19):
A ja mam w laptopie klawisz win po prawej stronie tylko, jest to mega niewygodne imo :/
Ranmus (19:34, 19.08.19):
Nie wiem o czym mowa Gnysek, ale jeśli chodzi o przełączanie okien w windowsie na jednym monitorze, to lepiej raczej win+tab, wypchnąć okienko do nowego pulpitu, a potem ctrl+win+left/right arrow
gnysek (14:00, 14.08.19):
wystarczy korzystać z recent window i ctr+tab
nowy_user (12:08, 14.08.19):
ale za to jak fajnie wygląda poza tym wydaje mi się, że wystarczy dokupić drugi monitor i w GMS2 pracuje się całkiem wygodnie.
exp (23:55, 13.08.19):
ale masakra jest z tym nowym interfejsem. nawyki budowane przez kilkanaście lat poszły do piachu
exp (23:53, 13.08.19):
nie trolluj dowcipnisiu
Chell (21:10, 13.08.19):
jak podasz "nowicjusz" to masz poblokowane różne lengthdiry itd
gnysek (20:15, 13.08.19):
To w celach poznawczych. Żeby potem wiedzieć dla kogo bardziej rozwijać.
exp (16:56, 13.08.19):
swoją drogą, przy rejestracji musiałem określić swój poziom zaawansowania, on na coś wpływa?
exp (16:56, 13.08.19):
pobrałem dzisiaj GMS2 i masakra, jak się wszystko pozmieniało
gnysek (11:48, 12.08.19):
GML jest do nauki w tydzień, jak znasz inny język i masz doświadczenie. Tylko ten ból, ilu rzeczy brakuje...
nowy_user (0:27, 10.08.19):
Wszystko na to wskazuje, myślę że w YoYo doskonale zdają sobie sprawę, ile $$ mogą na tej zmianie zarobić. Wiele małych firm GameDevowych pewnie rezygnuje z GMa na korzyść Unity, właśnie głównie dlatego, że nie znają GMLa i nie chcą marnować czasu na uczenie się nwego języka. A tu właśnie studia i zawodowcy to otencjalnie największy $
gnysek (15:19, 9.08.19):
Kto wie, może te zmiany w grudniu to pierwszy krok ?
gnysek (14:50, 9.08.19):
Miał być JS, ale ostatecznie wyparował z bety (a tam też chyba tylko był w opcjach, a pisać się nie dało).
nowy_user (11:01, 9.08.19):
Mi się marzy, aby GMS dodało w końcu możliwość pisania w innym języku. Co prawda znam tylko GML, ale zawsze mógłbym się nauczyć nowego języka, natomiast dużo łatwiej byłoby mi znaleźć kompanów do wspólnej pracy nad grą, gdyby można było pisać np. w C# . GML jest językiem bardzo niszowym, i ciężko w realu znaleźć ludzi, którzy go znają.
nowy_user (10:56, 9.08.19):
Nie do końca, bo system kamer się trochę zmienił, ja po imporcie swojego projektu mam małe zamieszanie w kodzie z viewami (tzn. wszystko działa jak trzeba , ale kod jest dla mnie dość obcy)
gnysek (17:28, 8.08.19):
Nieee, tylko interfejs, reszta ta sama Dopiero w grudniu będą zmiany, czwarty news od góry.
Konrad-GM (12:04, 8.08.19):
Siemaneczko, strzałka, piąteczka, GM Studio 2 tak się zmienił, że to już nie ten sam GM co na Delphi.
Pablo-GM (12:02, 8.08.19):
siemacie Panowie, kilka lat minęło, a w człowieku odezwał się zew stworzenia gierki. Zastanawiam się tylko jak mocno zmienił się sam game maker?
Flashek (14:26, 7.08.19):
jak ja bylem to było
szpaq99 (9:23, 7.08.19):
Na dolnym też nie było tragedii, dokładnie kilka dni tylko kilka razy przygrzało mocniej i tyle,
gnysek (9:41, 6.08.19):
ja całe życie nad morzem mieszkam i nie stwierdzam upałów w tym roku... może ze dwa dni.
szpaq99 (7:38, 6.08.19):
Sobie wiatraczki odpalcie
Flashek (22:06, 5.08.19):
nad morzem tez upały
Dester (13:34, 31.07.19):
faktycznie, przez przypadek zaznaczyłem persistent w jednym, dzięki @Threef
Dester (13:34, 31.07.19):
wygląda na to, że resetują się zmienne dotyczące symulacji fizyki, ale nie obiekty (pozycje, instancje utworzone w trakcie gry, itd)
Threef (13:32, 31.07.19):
Persistent obiekty?
Dester (13:29, 31.07.19):
czy to może mieć związek z gamemakerowym silnikiem fizyki? pierwszy raz z niego korzystam
Dester (13:27, 31.07.19):
room się nie restartuje, tylko tak jakby... zwalnia?
Dester (13:27, 31.07.19):
mam restart roomu w evencie naciśnięcia Q, ale po kilku niezwiązanych zmianach przestał działać
gnysek (10:29, 30.07.19):
nad morzem raczej nie
Flashek (23:14, 29.07.19):
ah te upały
Threef (10:27, 29.07.19):
Jeżeli ktoś nie zdążył wrzucić gry na ligę i chce to zrobić to niech wrzuci grę do Uploadera i prześle mi link na PW
exp (0:22, 29.07.19):
miał być to taki trochę klon icy towera i odnosić się do tego forum.gmclan.or...;comment=431274
exp (0:19, 29.07.19):
i patrzcie, wygrałbym turę
exp (0:19, 29.07.19):
ja miałem pomysł na prostą grę, ale stwierdziłem, że będzie to słabe
SimianVirus7 (20:00, 28.07.19):
Zabrakło minuty, żebym wstawił gierkę, ale i tak jest mocno niedokończona
SimianVirus7 (15:08, 27.07.19):
U mnie wszystko jest normalnie, w pionie jak i w poziomie
gnysek (14:19, 27.07.19):
Wam też na Chrome na komórce nie pokazuje się shoutbox aż nie przesunie się ekranu? Jakiś bug renderowania?
gnysek (8:57, 25.07.19):
Nie, w ten sposób się przyspiesza ich rysowanie. Dlatego ta opcja zniknęła.
SimianVirus7 (20:35, 24.07.19):
w gm:s2 można jakoś nie snapować tilesetów do grida? przycisk alt nie działa, jak to było w gm:s
gnysek (1:30, 24.07.19):
RPO to nie żarty. Niepotrzebnie mu zawracał głowę
Threef (15:53, 23.07.19):
Nie, ale zaśmieszkowałem sobie i trzeba
exp (15:52, 23.07.19):
tfu, przez maxgaminga
exp (15:52, 23.07.19):
ale nie czaje, że przez threefa w lidze trzeba mieć zgodę drugiej osoby? xd
Ankieta
» Ile powinny trwać tury Ligi 24?
24h
48h
54h (piątek od 18:00)
7 dni
inna długość (podałem w komentarzu ankiety)

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

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