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
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy GML
Treść artykułu
Zmienne w GM
autor: Tymon (6.12.05)
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...

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?

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
83 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 82, userów: 1, ukrytych: 0
NikonV392

0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
tramur (0:13, 19.01.17):
Przypomniało mi się coś podobnego x3.cdn03.imgwyk...oXFzut0SEMy.jpg Sorki za offtop, przekleństwa i triple-post.
tramur (0:11, 19.01.17):
Fajnie by było nadgonić te 10 lat w CMS-ie gmclanowym i przejść na Unicode, bo emoji nie działają.
tramur (0:09, 19.01.17):
Pomyśleć, że 10 lat temu za takie pyskówki można było zarobić wakat z forum na miesiąc. Dobrze, że te czasy minęły.
ΨΧΞ (0:06, 19.01.17):
znalazłem Wam coś na przypominanie mi o chłodzie następnym razem x3.wykop.pl/cdn...LbsI6nAUqG8.jpg
ΨΧΞ (23:49, 18.01.17):
wcale nie jadę, jestem pełen uznania troski o syna
MaxGaming (23:23, 18.01.17):
Ten po matkach jedzie a ma 27 lat XDDDD
ΨΧΞ (23:15, 18.01.17):
Sutyku i maxgaming: ale sensownego dissowania to wy się uczcie od woja, okej? bo to było słabe wojo: pysiu głuptaśny, a jeśli bym powiedział, że twoja stara szeptała mi tego newsa, próbując zarobić na wsparcie dla ciebie, to co byś zrobił?
MaxGaming (23:07, 18.01.17):
YXE może to była aluzja żebyś mnie gadał ze sobą, a więcej z nią?
Wojo (23:00, 18.01.17):
Wnioskuję że słyszałeś o tym od swojej dziewczyny
ΨΧΞ (20:34, 18.01.17):
słyszałem, że macie ostatnio biedne wsparcie od rządu :/
Sutikku (20:16, 18.01.17):
w końcu trzeba mieć szacunek do samego siebie xd
ΨΧΞ (20:12, 18.01.17):
Ja to wiem, ale dziewczyna kazała mi odzywać się grzeczniej do niepełnosprawnych.
MaxGaming (18:40, 18.01.17):
pysiaczku głuptaśny - boże jak to beznadziejnie brzmi xd
I am vader (16:03, 18.01.17):
Gnysek A coś co nie wymaga logowania?
Wojo (15:55, 18.01.17):
Ja tam was wszystkich lubię mimo, iz nie jestem zdolny do odczuwania jakichkolwiek emocji. Ludzie to istoty kierujące się uczuciami i pieniedzmi. Więc kończę już te psychologiczne badanie. Osiągnąłem to co chciałem, dziękuję
ΨΧΞ (14:09, 18.01.17):
tak, dokładnie to! Dziękuję pysiaczku głuptaśny :*
ANtY (14:05, 18.01.17):
@Nikas o tym mowisz? i.imgur.com/l2eaeUX.png
gnysek (13:43, 18.01.17):
Znalazłem w GM buga, ktory ma 14 lat i jest obecny do dzisiaj: forum.yoyogames...th_ext-jpg.6168
Nikas (12:34, 18.01.17):
Uwaga, to chyba czas na przypomnienie screena z opisem, że YXE to chłodna jednostka bez uczuć.
ΨΧΞ (12:20, 18.01.17):
nie jedną noc przepłakałem przez to. #takbylo, nie kłamię! :>
I am vader (11:02, 18.01.17):
Też bym coś dopisał, ale jestem przeciw nękaniu bezbronnych.
MaxGaming (10:23, 18.01.17):
Na pewno YXE płacze po nocach z tego powodu xD
Wojo (5:52, 18.01.17):
Skoro odpisujesz to jednak cię rusza, a ta bezsilność
ΨΧΞ (21:39, 17.01.17):
patrz, jak się przejąłem xD
Wojo (18:04, 17.01.17):
a raczej BYŁEGO admina hehe
Wojo (18:03, 17.01.17):
Nie ma to jak dostać nagrodę za obrazę admina xD
I am vader (17:44, 17.01.17):
:v
I am vader (17:44, 17.01.17):
Czemu nie mogło być tak pięknej świecącej błyszczącej rangi rok temu jak usera roku dostałem
gnysek (10:05, 17.01.17):
Ale zajebiście mi wyszedł skrypt parsujący tekst gmclan.org/uplo...log_parsing.png
Threef (18:25, 15.01.17):
No to wygląda jakby twoje "mouse" miało duplikat nazwy.
Ignatus (17:52, 15.01.17):
Threef-juz znalazlem o co chodzi ale logiki tu nie ma.Krzaczyl kod if mouse.x!=mouse.xprevious" po usunieciu tego wszystko dziala.Problem polega ze jedyne co zmienialem to podmienialem grafiki, w ogole kodu nie ruszalem i nagle zaczelo swirowac
I am vader (16:24, 15.01.17):
W warnlogu masz ze to za ten link
Nikas (12:23, 15.01.17):
Ej no serio to za ten obrazek i link do nakidmag? Lel
gnysek (12:05, 15.01.17):
polecam screeny i trailery na almora.pl
gnysek (12:05, 15.01.17):
@Wojo: ale nikt o online nie mówi, a na androidzie masz całkiem niezłą Almorę, a następny update pobije wszystko co do tej pory było
Threef (11:02, 15.01.17):
Ignatus cache wyczyszczony? Obiekt w Room jest?
Adriann (22:58, 14.01.17):
aww to: i.imgur.com/mT8i8.gif
I am vader (22:25, 14.01.17):
O KURCZE DZISIAJ ROCZNICA MOJEJ SYGNATURY
Ignatus (22:12, 14.01.17):
Jest kod do wykonania jak w pysk strzelil-nie robi i koniec.Identyczny obiekt z identycznym kodem ale sprzed 4 dni dziala.Magia
Ignatus (22:03, 14.01.17):
Mieliscie kiedys taka zawieche GM ze przestal wykonywac kod?Wlasnie to przerabiam.Cos pieknego,4 dni w plecy
MaxGaming (20:36, 14.01.17):
To jest ten przypadek gdy użytkowników jest tak mało że moderatorzy już z nudów wykazują się nadgorliwością no i żeby ich nikt nie oskarżył że nic nie robią ale wszyscy chyba wiemy że ten ban był bez sensu xd
I am vader (17:52, 14.01.17):
Niby za 18+ Ale ja tam gora widze 16+ bo jedyne widoczne piersi sa bardziej plaskie od powierzchni lustra
Ignatus (15:11, 14.01.17):
Za co to zgraniasz Nikas?
Gibki Kaktus (14:40, 14.01.17):
A ja za 4h mam studniówkę....
Gibki Kaktus (14:37, 14.01.17):
Nie wiedziałem, że Nikas ma bana xD
Wojo (13:41, 14.01.17):
co za społeczniaki, nie dość,że forum martwe do ubijacie aktywnych userów
Nikas (13:03, 14.01.17):
No elo wracam po krótkim banie, wskoczyły mi dwa kolejne warny. Czuję dobrze niekwestionowany zwycięzca jesli chodzi o warnlog. xD
Wojo (23:39, 13.01.17):
No i szczerze niewiele osób będzie w nią grało jeśli ktokolwiek, na urządzeniach mobilnych osiągnęłaby sukces jakby była zajebiście pod nie przystosowaną mechaniką. Ale i tak szacun za pisanie czegokolwiek
I am vader (23:38, 13.01.17):
Strasznie mało głosów w CA jak na ilość osób podrzucającą nominacje
Ankieta
» Czy jesteś szczery odpowiadając w ankietach w Internecie?
Tak
Nie

GMCLAN to serwis o programie Game Maker i nie tylko.
Copyright © 2002-2017. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!

[ Czas generowania strony: 0.02563 sekund ] [ Liczba zapytań MySQL: 16 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev