Argumenty i skrypty

Niedziela, 13 Czerwca 2004, 12:30
Czas czytania 1 minuta, 48 sekund
Zgodne z GM: gm5 gm6 gm7 gm8 gms1 gms2
Z tego mini kursu dowiesz się jak w praktyce zastosować wybuchową mieszankę: argumenty + skrypty, czyli utworzyć własną funkcję.
Podam przykład stworzenia skryptu kontroli ruchu obiektu w 8 kierunkach, ze zmianą sprite'u i warunkiem, że miejsce docelowe musi być wolne. Żeby dobitnie pokazać różnicę zapisu, stworzę kod w dziale ANY KEY, a nie dla osobnych działów KEYBOARD PRESS UP, DOWN, LEFT i RIGHT...
Skrypt:
kodif ( keyboard_check ( vk_up ) && place_free ( x , y - 4 ) )
{
y -= 4;
sprite_index = s_gora;
direction = 90; //A to dla pozniejszego stworzenia strzalu...
}

if ( keyboard_check ( vk_down ) && place_free ( x , y + 4 ) )
{
y += 4;
sprite_index = s_dol;
direction = 270;
}

if ( keyboard_check ( vk_left ) && place_free ( x - 4 , y ) )
{
x -= 4;
sprite_index = s_lewo;
direction = 180;
}

if ( keyboard_check ( vk_right ) && place_free ( x + 4 , y ) )
{
x += 4;
sprite_index = s_prawo;
direction = 0;
}
    Aby ten kod zapisać lepiej, należy użyć argumentów. Wcześniej przypomnę, że aby wykonać jakiś skrypt bez pomocy klocków, należy podać jego nazwę wraz z nawiasem w innym skrypcie, przykładowo:kodnazwa_skryptu();    Argumenty są to wartości, którymi może operować przywołany skrypt. Podajemy je w nawiasie oraz oddzielamy przecinkiem, np. kodnazwa_skryptu ( direction , 5 , c_white , gracz.x );    Możemy podać maksymalnie 10 argumentów. Takimi argumentami posługujemy się analogicznie jak ze zwykłymi wartościami, ale ich nazwy to argument0 ... argument9.

    Teraz nowy zapis wyżej podanego kodu, w tym celu rozbiłem go na 2 skrypty, jeden w dziale ANY KEY obiektu w klocku PIECE OF CODE, drugi skrypt stworzyłem już normalnie i nazwałem go krok.

PIECE OF CODE, dział ANY KEY:
kodif ( keyboard_check ( vk_up ) )
{
krok ( 0 , -4 , 90 , s_gora );
}

if ( keyboard_check ( vk_down ) )
{
krok ( 0 , 4 , 270 , s_dol );
}

if( keyboard_check ( vk_left ) )
{
krok ( -4 , 0 , 180 , s_lewo );
}

if( keyboard_check ( vk_right ) )
{
krok ( 4 , 0 , 0 , s_prawo );
}
skrypt o nazwie krok:
kodif ( place_free ( x + argument0 , y + argument1 ) )
{
x += argument0;
y += argument1;
direction = argument2;
sprite_index = argument3;
}
    Dzięki takiej technice zapisu kodu możemy oszczędzić sporo czasu przy tworzeniu gry oraz skrócić jej kod. Po opanowaniu tego sposobu, będziemy umieli tworzyć własne funkcje.

Miłego testowania!
Komentarze (łącznie 7):
Choosen (Pon., 21 Cze. 04, 14:58)
#1

Głupio się czuję oceniając coś twojego :-) Na szczęście mam dla Ciebie pozytywny komentarz. Artykuł czytelny i przejżysty. Nie wydaje mi się żeby ktos mogł to wyjaśnić lepiej. Dałem 6 bo problem poruszany w artykule nie należy do najtrudniejszych ;-)

Ranma_man (Wto., 22 Cze. 04, 16:28)
#2

To ty jeszcze czytasz takie stare arty? Jak bede mial czas to wrzuce reszte. :)

CRASH (Pon., 26 Lut. 07, 16:54)
#3

Nawet spox... przyda sie :P

P
Patjar (Nie., 11 Mar. 07, 09:20)
#4

Swietny artykol, na pewno mi sie przyda :)

K
kasa100 (Nie., 24 Cze. 07, 17:47)
#5

spoko art THX

dżamper (Nie., 20 Sty. 08, 22:26)
#6

a ja się sam tego nauczyłem :] nowym się przyda :)

D
DamianD2111 (Nie., 17 Lut. 08, 17:56)
#7

Bardzo ułatwia tworzenie dla początkujących...

Najnowsze wersje GameMakera:

Stabilna
2023.8.1.102 • 2023.8.1.148
wydana 13 dni temu
LTS
2022.0.1.31 • 2022.0.1.30
wydana 168 dni temu
Beta
2023.800.0.406 • 2023.800.0.429
wydana 29 dni temu
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
Shoutbox
Adriann (21:06, 14.08.23)
Jest..hoho:D
Adriann (21:04, 14.08.23)
Nie znam tego, poszukam. Nie mówisz mam nadzieję o tej podmiance wewnątrz skryptu?
gnysek (10:38, 14.08.23)
Przecież jest: Search & Replace. Do tego nazwy skryptów i zasobów akurat Feather podmienia praktycznie bez problemów.
Adriann (14:39, 12.08.23)
Przydałaby się opcja do globalnej zmiany nazwy zmiennejobiektu we wszystkich skryptach i obiektach :D Tak to jest dość ciężko zabrać się za sprzątanie
SimianVirus7 (10:39, 12.08.23)
To nie burdel, to nieład artystyczny
exp (00:35, 12.08.23)
Feather nie zrozumiał, że burdel jest elementarną częścią mojego projektu
exp (00:34, 12.08.23)
Miałem to samo, nie tyle otworzyłem stary projekt, co w końcu ściągnąłem aktualizację (bo olewałem ten komunikat od chyba półtora roku)
gnysek (23:48, 10.08.23)
Kolizje tilesetowe rządzą!
gnysek (20:01, 26.07.23)
zobaczycie nowy edytor kodu, powinen wskoczyć do bety w sierpniu...
SimianVirus7 (11:24, 25.07.23)
No dokładnie :D
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Kiedy wyjdzie GameMaker (Studio) 3.0?