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 (11:20, 10.04.2009)

dodał zmienną ?

av

kt1117 (14:07, 2.02.2010)

A poco te zmienne bo nie kumam

av

ZeroXbot (14: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 (14: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 (8:49, 19.02.2010)

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

av

lenin (8:55, 19.02.2010)

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

av

Mentoss (9: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 (9: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 (9:19, 19.02.2010)

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

av

Egzekutor (10: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
1 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
Sutikku (12:54, 18.10.17):
właśnie nie wiem czy gms 1.4 czy 2
PsichiX (10:59, 18.10.17):
a pamietasz do ktorej wersji GMa to bylo?
Sutikku (21:43, 17.10.17):
coś mi się pokićkało czy jakiś czas temu ktoś udostępniał tutaj przykład networkingu z TCP i UDP i chatem? Bo nie mogę znaleźć, a dałbym sobie rękę uciąć, że tak było
I am Lord (10:06, 15.10.17):
A dobra widzę teraz że ten drugi router w trybie acces point ma zablokowane opcje konfiguracji firewalla, czyli działa tylko ten pierwszego routera
I am Lord (10:04, 15.10.17):
Podłączyłem ze sobą 2 routery po kablu. Oba nadają Wifi pierwszy router funkcjonuje zwyczajnie jako router a ten drugi jako acces point i teraz pytanie czy mam 2 firewalle?
PsichiX (14:48, 11.10.17):
poprawilem
gnysek (12:50, 11.10.17):
gobarbra.com/hi...2e9735f81eacc5e dzika wixa !
gnysek (7:34, 11.10.17):
tam jest jakiś błąd javascriptowy, chyba spowodowany google analytics - po przeniesieniu serwera sie tym zajmę (czyli po weekendzie).
Ignatus (20:04, 10.10.17):
U mnie często też tak jest-i nie ładuje się w ogóle.Za którymś podejściem dopiero
PatrykPlayingPOLSKA (19:40, 10.10.17):
Czy tylko u mnie otwieranie poprzednich stron tematów trwa w nieskończoność.Nie wiem czym może być to spowodowane,ale wątpię że to przez internet,sprawdzałem na wielu urządzeniach i wszędzie się otwiera naprawdę długo.
I am Lord (15:39, 10.10.17):
DS mają swoje funkcje do zapisywania
Adriann (15:05, 10.10.17):
Nie mogę otworzyć poprzedniej strony na forum
Uzjel (12:55, 10.10.17):
Niestety, ale to jedna z tych rzeczy "o których trzeba było pomyśleć wcześniej"
Ignatus (11:40, 10.10.17):
Kurcze klapa bo nie zapisuje w ten sposob DS i wywala błedy a ze względu na dynamiczne oświetlenie nie ma w ogóle opcji żeby to ręcznie ogarnąć..Znacie jakiś dobry sytem save, nawet płatny?
Ignatus (9:21, 10.10.17):
Potrzebuje prosty save checkpoint przed spotkaniem z bossem.Powinienem wybrać game_save() ,game_save_buffer() czy coś zupełnie innego?? Zapisywanie 1000zmiennych w autorskim systemie nie wchodzi w grę bo to przerost formy.Czym się różnią te systemy?
gnysek (8:07, 10.10.17):
trzeba po prostu dać w grze opcję przekonfigurowania klawiszy na padzie
Threef (5:46, 10.10.17):
Czyli GM obsługuje to tak samo jak kierownice, drążki, joysticki i tanie pady
Threef (5:46, 10.10.17):
To jest DirectInput. Problem to tylko koniguracja klawiszy bo każda może mieć inne
PsichiX (20:38, 9.10.17):
ta mata uzywa standardowego protokolu HID z layoutem dla gamepadów - obsłużysz je tak samo, jak buttony byle pada
Ignatus (20:33, 9.10.17):
Threef: Minotour był naprawdę zabawny;p Jak ogarnąłeś matę w GM? Chyba że to nie GM..
ANtY (8:04, 9.10.17):
wybuch jak wybuch, szczegolnie jak Ignatus napisał na statycznym ssie. Ale trawa i ogólnie enviro cieniutko wygląda
Ignatus (6:13, 9.10.17):
i gdzie ta wersja do grania w zapowiedziach?
doctor (21:11, 8.10.17):
Możecie też "chore game makery znalezione przez ferviego"
doctor (21:00, 8.10.17):
Zróbcie subforum dla Enigmy, a nie
PsichiX (20:50, 7.10.17):
bedzie dzis wrzucona wersja do grania w zapowiedzi
Ignatus (20:46, 7.10.17):
ok,ale ponawiam poprzednią wypowiedź- particle można ocenić tylko w ruchu
PsichiX (18:22, 7.10.17):
nowe wybuchy media.discordap...-explosions.png
Chell (14:37, 7.10.17):
jeden z konkursow PGG nie działał to na szybko zrobiłem w gmie w 15 minut zamiennik, człowiek warga w nim udział, mój największy devowy sukces
Gibki Kaktus (20:58, 5.10.17):
Za rok
ANtY (20:15, 5.10.17):
gibki bedziesz na PGA?
Gibki Kaktus (14:33, 5.10.17):
Szkoda, że xp nie ma, jakoś najbardziej jego lubię
I am Lord (14:28, 5.10.17):
Kupiłem żeby sobie powspominać stare czasy przed game makerowe
Gibki Kaktus (14:10, 5.10.17):
O to jednak nawet funta nie wydam na to xD
gnysek (13:36, 5.10.17):
O, nowa wersja GMS2 wyszła.
gnysek (8:21, 5.10.17):
O, jednak grafiki z RTP maja licencję na użytek jedynie w RPG Makerze. Trochę sprawa
Gibki Kaktus (23:22, 4.10.17):
Aż chyba się wykosztuję i dam te niecałe 6 funtów, żeby mieć powyżej średniej xD
gnysek (21:55, 4.10.17):
Dobrze rozumiem, że skoro mam licencję na RPG Makera, to mogę jego grafiki w GM Studio użyć do własnej gry, bo mam licencję ?
I am Lord (21:45, 4.10.17):
W bundlu jest RPG maker
Chell (7:13, 4.10.17):
do uslug
Gibki Kaktus (6:58, 4.10.17):
Chell, poprawiłeś mi humor przed robotą
Chell (22:33, 3.10.17):
niewazne w sumie
Chell (22:32, 3.10.17):
niezwiazany ze wczesniejszym kontekstem
Chell (22:32, 3.10.17):
to byl tylko tescik, bo teraz mi sie przypomnialo ze bylo serduszko, ale nigdy nie pod intuicyjnym <3 tylko jakims wlasnie dziwnym
Chell (22:31, 3.10.17):
:heart:
Chell (22:31, 3.10.17):
zawsze mogłem, teraz mam większą siłę przebicia
Threef (22:00, 3.10.17):
Chell. To że jesteś w końcu częścią PGG to nie znaczy że możesz lizać tyłki innym userom gmclanu xD
Chell (21:24, 3.10.17):
Adriann, ANtY i Boad - ze strony pgg questa wroze sukces, wszyscy 3 jestescie na prawie szczycie listy gier do obskoczenia <3
Saus (15:20, 3.10.17):
Ale macie super nowe forum :o
Tymon (14:33, 1.10.17):
gnysek, to było tak dawno.
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.
Copyright © 2002-2017. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus, © 2017 {=|=} fable_inside();

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