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
49 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 46, userów: 3, ukrytych: 0
Uzjel, RodnaldCrife, ♔ Adriann ♔

0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
I am Lord (18:10, 22.05.17):
A tak w ogóle to gumce też można rozmiar zwiększyć, tylko że ona ma miękkie krawędzie
I am Lord (18:08, 22.05.17):
aha Opacity na 0 jeszcze
I am Lord (18:08, 22.05.17):
Masz tak się to robi: i.imgur.com/IDtZODf.png
I am Lord (18:02, 22.05.17):
Nie wierzę co czytam
Uzjel (16:35, 22.05.17):
Aj ludzie, problemy se robicie
gnysek (16:34, 22.05.17):
GIMP ma przeźroczyste tła. GMS 1.x ma funkcję "make opaque", a GMS2 ma różdżkę która zaznacza na raz 1 kolor wszędzie (contignous).
Ignatus (16:16, 22.05.17):
Wlasnie GM ma funkcje ktorej mi w programach graficznych brakuje (albo nie wiem jak znalezc) "Erase a color"
nowy_user (15:46, 22.05.17):
Zaznaczanie róźdżką też jest strasznie toporne. No nie wierzę że w gm sudio nie ma innego sposobu. Przecież są ludzie, którxy tworzą grafiki np. w gimpie lub paincie, i nine chce mi się wierzyć że za każdym razem usuwają białe tło piksel po pikselu. Przecież to niedorzeczne.
nowy_user (15:26, 22.05.17):
gm studio 1 ; ehhh w gm 5.3 nie bylo problemu , tlo bylo lewym dolnym rogiem
gnysek (15:22, 22.05.17):
Ktory GM tak w ogóle?
gnysek (15:22, 22.05.17):
To zaznacz różdzką
nowy_user (15:07, 22.05.17):
Niestety przy 100% przezroczystosci, farba ,maluje na czarno, a zaznaczenie + delete owszem działa ale tylko na prostokątnych powierzzchniach. Dalej nie działa to tak jak trzeba
ANtY (13:05, 22.05.17):
spróbuj zaznaczenie + delete, jak pomoglem to daj okejke
gnysek (11:11, 22.05.17):
To weź farbę i ustaw 100% przeźroczystą
nowy_user (11:06, 22.05.17):
tak tylko że gumką muszę tak prezycyjnie piksel po pikselu, a ja chce cały obszar ograniczony konturami, tak samo jak farbą w paincie
ANtY (10:51, 22.05.17):
gumką
nowy_user (10:09, 22.05.17):
hej , jak zamalować tło na przezroczyste w edytorze spritow w game maker?
I am Lord (15:38, 21.05.17):
site:gmclan.org w google
BloodDzioch (14:39, 21.05.17):
Gdzie na community jest jakaś wyszukiwarka? Za cholery nie mogę znaleźć
Adriann (10:36, 21.05.17):
To odpada, potrzebuję czegoś animowanego pomiędzy
Threef (10:29, 21.05.17):
Nie da się. Możesz wstawić [1] pomiędzy [0] a [2], ale żadnych obiektów nie wsadzisz. Ona mają depth, ale silnik chyba rysuje je osobno. Możesz za to rysować draw_background()
Adriann (22:53, 20.05.17):
Tznnnn chcę umieścić jakiś obiekt między backgrond[0] a [1]
Adriann (22:52, 20.05.17):
Hymmm wiecie może czy da się ustalić depth tła?
MaxGaming (17:25, 20.05.17):
ktoś coś? xd forum.gmclan.or...mp;#entry444361
Adriann (13:33, 20.05.17):
Wszystkie dźwięki są do wymiany
Ignatus (13:32, 20.05.17):
Adrian- to "ouch" przy trafieniu jest bezwzgęldnie do zmiany, brzmi jak z pornosa
Adriann (17:01, 19.05.17):
Byłbym wdzięczny za kilka lajków;>
Uzjel (10:32, 19.05.17):
Kurde, myślałem że dłużej to robicie. To jednak szybko wam idzie
ANtY (9:16, 19.05.17):
zaczelismy dopiero w listopadzie, rok developmentu to chyba nie tak duzo na taka giere? :d
Uzjel (20:03, 18.05.17):
Myślałem, że premiera już niedługo, a tu Q1-18 ???
Chell (18:48, 18.05.17):
kiedyś za wprowadzanie innych w błąd były bany
ANtY (18:29, 18.05.17):
bit.ly/warlocks2steam
CyberZoGA (ZombiesWillBack) (17:01, 18.05.17):
Wprowadzam ale przypadkiem, nie robię tego specjalnie. Za co przepraszam
Nikas (15:18, 18.05.17):
Jak wykupię ponownie domenę. XD
Wojo (13:55, 18.05.17):
To nie wiem dlaczego wprowadzasz innych umyślnie w błąd
Chell (13:48, 18.05.17):
nikas, kiedy dodasz wybor jezyka na n94games.com?
CyberZoGA (ZombiesWillBack) (13:17, 18.05.17):
Do testowania jesr Mark a do animacji i modelowania Max
Wojo (13:15, 18.05.17):
Nie rozumiem, to do testowania jest max? Czy jak
CyberZoGA (ZombiesWillBack) (13:09, 18.05.17):
Tester grafiki :p, przepraszam, mój błąd
CyberZoGA (ZombiesWillBack) (13:09, 18.05.17):
Do grafiki jest 3DS Max, mark to benchmark :'
Wojo (12:45, 18.05.17):
Pobrałem tego 3D marka ale wątpię żeby to było do tworzenia grafiki
CyberZoGA (ZombiesWillBack) (10:24, 18.05.17):
*Max
CyberZoGA (ZombiesWillBack) (10:23, 18.05.17):
*3DS Mark bo 3D mark to tester grafiki xd
CyberZoGA (ZombiesWillBack) (10:18, 18.05.17):
Blender albo 3DMark?
Wojo (9:10, 18.05.17):
W czym najlepiej modelowac 3D? Bo chciałbym robić sobie jakieś grafiki pod unreal engine 4
Threef (8:35, 18.05.17):
Albo rób zip lub instalator. Bo Samorozpakowujący i odpalający się program zawsze będzie podejrzany przez większość antywirusów.
CyberZoGA (ZombiesWillBack) (21:40, 17.05.17):
Tu masz opisane co i jak nie ma problemu
PatrykPlayingPOLSKA (21:36, 17.05.17):
AVG,spróbuję to zrobić,dzięki
Ankieta
» Jakiej wersji GameMakera głównie Używasz?
GameMaker: Studio 2
GameMaker: Studio
GameMaker 8.1 i starsze
Żadnej

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.01388 sekund ] [ Liczba zapytań MySQL: 16 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev