[3] Game Maker :: Događaji, akcije i međusobno funkcionisanje

[3] Game Maker :: Događaji, akcije i međusobno funkcionisanje

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Događaji, akcije i međusobno funkcionisanje

[1] Događaji
[2] Akcije
[3] Osnovni sklopovi
[3.1] Sklop za dodavanje života (prvi način)
[3.1.1] Sklop za dodavanje života (drugi način)
[3.2] Sklop za gubljenje života (prvi način)
[3.2.1] Sklop za gubljenje života (drugi način)
[3.3] Sklop za ispitivanje preostalih života (prvi način)
[3.3.1] Sklop za ispitivanje preostalih života (drugi način)


Napomena ::Važno je da ovu lekciju dobro utvrdite jer će nam biti preko potrebna za nastavak!

[1] Događaji

Sa događajima smo se upoznali u prethodna dva članka. Ovoga puta sam ih odlučio grupisati po vrstama. Za svaku vrstu sledi i opis.


Create - odrađuje funkcije pri kreaciji objekta.
Destroy - odrađuje funkcije kada je objekat uništen i dok traje njegovo uništavanje.
Alarm - koristi se pri radu sa tajmerom.
Step - odrađuje funkcije pri kretanju (koračanju) objekta. Deli se na tri podvrste;
Step - kretanje tokom cele igre.
Begin Step - početak kretanja
End Step - završetak kretanja.
Collision - odrađuje funkcije pri kontaktu sa nekim drugim objektom.
Keyboard - odrađuje funkcije pri pritisku određenog dugmeta na tastaturi. Srodno je sa dve vrste događaja;
Key Press - odrađuje funkcije samo pri pritisku određenog dugmeta u tom trenutku.
Key Release - odrađuje funkcije pri otpuštanju dugmeta na tastaturi.
Mouse - odrađuje funkcije pri pritisku tastera na mišu ili pomeranja točkića.
Other - dodatni događaji uglavnom vezani za okolinu i statička dešavanja.
Draw - odrađuje funkcije koje crtaju objekat (ovaj metod se najviše koristi u 3D režimu).
Triggers - složeniji i kompleksniji događaj koji se retko koristi u Game Maker-u pri praktičnom radu. Ovaj događaj ispituje da li je počela ili je završena neka radnja i ako jeste odrađuje kod koji se piše naknadno u trigger (okidaču).


[2] Akcije

Postoji niz akcija koje prave programeri da bi zamenili korišćenje koda. Te akcije se odrađuju ako je zadovoljen događaj (naprimer ako je kreiran objekat ili ako je uništen). Akcije se mogu naknadno preuzeti u obliku .lib fajlova (statičkih biblioteka koje sadrže akcije u sebi). Iste se pišu u Delphi programskom jeziku međutim postoje posebni programi za ubrzavanje ove metode.

Akcije delimo u više grupa:


Pokretačke - osnovne akcije kretanja objekta
Opšte(1) - osnovne akcije za kreiranje objekata, njihovu modifikaciju, dodavanje zvuka, i rad sa sobama.
Opšte(2) - osnovne akcije za tajmer i vreme, dodatnim elementima u sobi i za rad sa resursima
Kontrolne - akcije koje najviše rade sa varijablama i GML kodovima. Ove akcije su za naprednije korisnike
Bonus i poenske - ove akcije služe za dodavanje helti, života i poena igraču.
Crtačke - akcije za crtanje fontova, sprajtova i geometrijskih oblika


[3] Osnovni sklopovi

Kroz pravljenje igre susretaćete se sa situacijama kada ćete morati da razmišljate logički da bi dodali neku osobinu objektu. To znači da ćete morati da koristite kombinacije događaja i akcija zajedno sa kodovima kako bi objekat izvršavao potrebne parametre. Sve ovo čini jedan sklop. Mi ovoga puta govorimo o osnovnim sklopovima tipa;


dodavanje života igraču;
dodavanje poena igraču;
dodavanje brzine igraču;
dodavanje putanje igraču;
dodavanje AI (veštačke inteligencije);
itd...


[3.1] Sklop za dodavanje života (prvi način)

Sklop dodavanja života objasniću na ovom primeru koji se može koristiti na dva načina. Prvi je lakši, ali ja ću vam objasniti i drugi koji je bolji od prvog jer se sastoji od varijabla (promenljivih) koje možemo definisati i u kodovima za druge objekte.

1. Kada smo kreirali objekat dodajemo događaj Create pritiskom na dugme Add Event.



2. Sada idemo na desnu stranu prozora i pronađemo tab Control. U njemu nalazimo grupu Variables i biramo opciju Create Variable desnim klikom (kvadratić sa natpisom Var obeležen na slici dole).



3. Pojaviće se prozor sa natpisom Set Variable u koji morate ukucati sve kao na slici dole. Umesto ispisa zivota možete dodati bilo koju promenljivu funkciju, to jest, proizvoljnu reč. U tutorijalima na Internetu ćete često videti da se obeležava sa global_lives , ali to nije obavezno. Ovde smo definisali da želimo da igrač ima tri života.



[3.1.2] Sklop za dodavanje života (drugi način)

1. Kada smo kreirali objekat dodajemo događaj Create pritiskom na dugme Add Event.



2. Sada idemo na desnu stranu prozora i pronađemo tab Score. U njemu nalazimo grupu Lives i biramo opciju Set Lives desnim klikom (prvi kvadratić sa srcem obeležen na slici dole).



3. Pojaviće se prozor sa natpisom Set Lives u koji morate ukucati koliko života želite da ima igrač. Ovde smo definisali da želimo da igrač ima tri života.



Napomena ::Exclamation Drugi način je lakši, ali videćete kasnije kada budete pravili veći projekat u Game Maker-u, više ćete uštedeti vremena ako koristite varijable (promenljive) iz prvog načina.

[3.2] Sklop za gubljenje života (prvi način)

Da ne bismo išli korak po korak objasniću vam kako funkcioniše sklop za gubljenje života. Sećate se da smo u prošlom primeru stavili događaj Collision (kontakt) igrača sa neprijateljem pri kom bi igrač odmah izgubio igru. Nakon toga igra ili nivo bi se morali restartovati, što bi bilo zamorno i dosadno.

Zato ćemo po istom, ali modifikovanom primeru staviti da igrač izgubi život kada dođe u kontakt sa neprijateljem. Dodajemo događaj Collision pritiskom na Add Event pa na Collision i u padajućem meniju biramo objekat neprijatelja.




Nakon toga, istim postupkom kao i u prethodnim primerima setujemo varijablu životi na -1 (broj života se smanjuje za 1) i štikliramo Relative (na slici nije štiklirano zbog tehničkih problema, ali vi štiklirajte). Za one koji su mislili da se broj života setuje na -1, to je nemoguće u Game Maker-u. Broj života mora biti ceo pozitivan broj. Inače, ovo nije slučaj kada se radi o korisnički definisanim varijablama ( ove varijable se generišu u GML ).



[3.2.1] Sklop za gubljenje života (drugi način)

Prvi korak je isti kao i u prethodnom primeru. Dodajemo Collision događaj za igrača, a kao predmet događaja stavljamo neprijatelja.




Kada smo sa tim završili, sa desne strane nalazimo tab score i desnim klikom idemo na akciju Set Lives.



U prozoru koji se pojavi pred nama upisujemo -1 da bi znali da nam se pri tom događaju oduzima 1 život i štikliramo Relative (na slici nije štiklirano zbog tehničkih problema, ali vi štiklirajte.



[3.3] Sklop za ispitivanje preostalih života (prvi način)

Tokom igre se može desiti da izgubimo sve živote. Tada moramo podesiti da se nivo restartuje. Ovo je dakle, najvažniji, ali i najteži deo za vas - da postavite programu/igri zadatak da se ako je broj života jednak nuli ili manji od jedan (evo opet logike) nivo restartuje.

Dodaćemo događaj Step. Zašto baš njega? Zato što je on najbolji za tu namenu. Svaki put kada objekat napravi neki korak - to će se računati kao događaj Step. Pa ako pri koraku igrač ima 0 života, soba će se restartovati. Da smo naprimer stavili događaj Create, program bi samo pri kreiranju objekta ispitivao dali igrač ima 0 života, što je nemoguće, jer igrač na početku ne može da ima 0 života.



Sada ćemo dodati akciju Test Variable, klikom na tab control pa desnim klikom na Test Variable.




Obratite pažnju da u polje za ime varijable uvek ide reč koju prvo odredite. Ako ste odredili na početku da će se varijabla zavti zivota, ne smete je menjati, pa čak ako je to i jedno slovo razlike (života/i/u)! To je zato što računar pazi na svaki podatak koji unesete. On nema sposobnost da rasuđuje i radiće onako kako ga isprogramirate. Dakle, upisali smo ime varijable, vrednost stavili na nulu, a operaciju podesili na equal to (jednako sa).

Postavlja se pitanje; zašto smo to uradili?

zivota = 3; pri kretanju (testiraj varijablu zivota); ako je (varijabla jednaka 0) odnosno zivota = 0; restartuj sobu;

Isto tako smo mogli staviti da vrednost bude nula, ali bismo onda morali promeniti operaciju u manje od (smaller than), jer je nula manje od jedan.



Kada smo to podesili vreme je da podesimo akciju koja će se tada desiti. Tu akciju moramo posebno odvojiti i postaviti je ispod akcije testiranja varijable kako bi program znao da se ta akcija odnosi na rezultat ako je zadovoljen uslov koji postavlja to testiranje. To ćemo uraditi pomoću blokova. U tabu control nalazimo grupu Others i desnim klikom prvo na gornju strelicu, pa potom desnim klikom na donju.



Nakon toga ćemo videti da su se blokovi pojavili u polju sa akcijama:



Ako je sve u redu, idemo na tab main1 >> Rooms te biramo desnim klikom ikonicu kao što je obeležena dole na slici.



U sledećem prozoru birate kako želite da izgleda tranzicija to jest, stil prelaza po ekranu pri restartovanju sobe.



Sada smo sve završili i ostalo nam je još da akciju Restart room prebacimo između ova dva bloka na slici. Kako ćemo to uraditi?



Dolazimo mišem do željene akcije pritisnemo levi klik i ne puštamo sve dok ne dođemo do sredine (između prvog bloka i drugog bloka). Tada će akcija biti premeštena tu gde treba.



[3.3.1] Sklop za ispitivanje života (drugi način)

Opet dolazimo do onog drugog, naizgled lakšeg načina. Dodajemo događaj Step i za njega akciju Test Lives koju možete dodati klikom na tab Score >> Lives pa desni klik na drugu ikonicu.




Princip je isti kao i u prethodnim primeru ispitivanja. Kucate vrednost 0 i birate equal to ili kucate vrednost 1 i birate smaller than.



Nakon toga opet dodajemo dva bloka kao i u prethodnom primeru:



Nakon toga nastavlja se isti postupak kao i u prethodnom primeru, dodajemo akciju Restart room i mišem je prevučemo između dva bloka. To na kraju izgleda ovako:

.

Napomena! ::Exclamation Između blokova može stojati bilo koja akcija koju želite da se desi pri gubitku života. Takođe, ovaj sklop važi i za gubitak helta ili za gubitak skora, sem što varijablu zivota menjamo u helta ili skor ili u tabu score nalazimo željene akcije i premestimo ih u prozor sa akcijama.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 1090 korisnika na forumu :: 43 registrovanih, 7 sakrivenih i 1040 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: antonije64, Apok, bojcistv, Boris BM, ccoogg123, Denaya, Dimitrise93, DonRumataEstorski, draganca, drimer, esx66, FileFinder, Frunze, goxin, Još malo pa deda, Karla, kolle.the.kid, Krvava Devetka, kunktator, Marko Marković, Mercury, Metanoja, milenko crazy north, moldway, mrvica78, nemkea71, opt1, ozzy, procesor, radoznao, RJ, Stanlio, stegonosa, Sumadija34, TheBeastOfMG, Toper, Trpe Grozni, uruk, vathra, wolf431, YugoSlav, Zoca, žeks62