Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3D schodisko v game maker

Hoci bol program Game Maker vytvorený primárne pre tvorovi 2D hier, jeho plná verzia podporuje aj hry v 3D. Názory na zmysluplnosť tvorby 3D hier v GM sa rôznia - existujú ako prívrženci, tak i presvedčenie odporcovia. Pravdou je, že 3D tvorba v GM je značne obmedzená, až primitívne. GM zvláda vykreslenie iba elementárnych telies typu kocky alebo valca, postráda možnosť jednoduchého importu priestorových telies vytvorených v iných programoch atď. Tvoriť 2D skákačky je síce pekné, ale až prechod do 3D je to pravé, pretože tvoríme simuláciu nášho sveta v PC. Tvorba hier v 3D grafike je však veľmi zložitá a zdĺhavá, pomocou rôznych "klikátek" ťažko zrealizovatelná. Ponúka sa využiť XNA. Táto platforma sa javí svojou obrovskou potenciou ako dokonalý nástroj pre tvorbu hier, hoci už 2D alebo 3D, avšak kto nevládne C #, nevládne ani XNA. Pre vývojárov-začiatočníka sa teda cesta stáča opäť k Game Makeru. Osobne vidím situáciu tak, že rozumný spôsob preniknutia do tvorby 3D hier je vytvoriť prvý 3D projekt v GM a potom prejsť do sféry profesionálnejší, napr. Do vyššie spomínaného XNA. Preto som sa rozhodol napísať tento článok, aby som ukázal, že aj pri použití jednoduchého kódu GM zvládne vytvoriť zaujímavé veci, nevyhnutných v bežných 3D hrách.

Ako príklad som zvolil schodisko. Ako v 3D móde zabezpečiť, aby v FPS hre kamera reagovala na schody a umožnila na ne vystúpiť a zostúpiť? Hľadal som nejaké zmysluplné riešenie, ale aj v zahraničných diskusiách ľudia len odporúčali vytvoriť veľa objektov, pričom každý by pri kolízii s kamerou zvýšil / znížil jej výšku o určitú hodnotu na priestorové osi z. Tento spôsob riešenia zdá sa mi trochu nešťastný, vývojár je nútený kvôli každému jednému schodu zvlášť vytvoriť nový objekt a umiestniť do do miestnosti. Čo mi teda zostávalo než nájsť spôsob vlastné. Výsledok sa mi zdá uspokojivý, preto som sa ho rozhodol zverejniť

Ako prvý si v GM vytvoríme nový objekt, do ktorého napíšeme všetok kód pre vykreslenie schodísk, potom môžu prísť snívanie pod. Do eventu Draw napíšeme kód pre vykreslenie podlahy a bloku, ktorý bude za chvíľu tvoriť prvý schod nášho schodisko.

d3d_draw_block(0,160,0,100,180,10,background_get_texture(textura),4,1);

Hru spustíme, výsledok by mal vyzerať nejako takto:

Game maker - 3D hry

Pekné. Pokiaľ s FPS kamerou cez tento schodok prejdeme, samozrejme sa nič nestane. Je asi jasné, že poloha kamery vo výške nemôže byť pevne daná, ale že musí byť jej výška premenlivá, aby umožňovala pohyb po schodisku hore a dole. Vytvoríme teda premení na výšku kamery, nazveme ju logicky z. Aby sa kamera nachádzala dolu na zemi, pridáme k nej nejakú hodnotu, ja zvolil 60. V kóde pre kameru by teda malo vzniknúť niečo ako toto:

d3d_set_projection(x,y,z+60,x+cos(direction*pi/180),y-sin(direction*pi/180),z+59.7, 0,0,1);

Hurá na vytvorenie funkčného schodisko. Najskôr musí GM overiť, či sa x-ová a y-ová pozície kamery nachádza na schodu.

Game maker - 3D hry

Pozícia kamery TEDe musí byť väčšia ako body x min ay min a zároveň menšie ako body x max ay max. Tým sa zabezpečí, že sa kamera nachádza na schodu. Teraz sa už môžeme vrhnúť na napísanie funkcie umožňujúce vrátenie výšky schodu, ktorá sa pripočíta k výške kamery. Funkcie sa v GM tvoria ako skripty. Kliknite na "Create a script". Otvorí sa súbor pre písanie kódu. V kolónke name script pomenujeme. Pokiaľ upravujeme už existujúce funkciu, ako napríklad teraz, je pekný zvyk ako meno skriptu použiť meno upravované funkcie, ale s koncom rozšíreným o popis funkcie. My budeme používať funkciu pre vykreslenie bloku, názov som teda zvolil d3d_draw_block_z. Do skriptu vložíme nasledujúci kód:

d3d_draw_block(argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7,argument8);

if(o_player.x < argument3 and o_player.x > argument0 and o_player.y < argument4 and o_player.y > argument1) o_player.z = argument5;

V prvej časti je funkcia vykresľujúca blok, teda náš schod. Tvrdenia 0 - 8 reprezentujú atribúty funkcie, teda pozíciu, použitú textúru atď. Jasné. Podmienka if tvoria samotné jadro problému "Ako vytvoriť schodisko". Podmienka skontroluje, či sa pozície kamery nachádza na schode, ako som popisoval skôr (u mňa kameru vykresľuje objekt o_player, vy si teda kód vhodne prepíšte). Ak je podmienka platná, funkcia priradí premenné z (výške kamery) atribút argument5, teda hodnotu z2 - výšku schodu. No a to je všetko! Aké jednoduché. V kóde kamery sa k hodnote z pripočíta konštanta 30 a kamera sa zdvihne.

Teraz sa vrátime do draw eventu objektu, ktorý zabezpečil vykreslenie nefunkčného schodu a funkciu d3d_draw_block prepíšeme na d3d_draw_block_z. atribúty necháme rovnaké. Hru spustíme a čo sa nestane! Ak sme všetko napísali správe, kamera na schod naozaj zareaguje a zdvihne sa od zeme o hodnotu 10 !! Blahoželám. Teraz už už môžeme tvoriť ľubovoľná schodisko, len si musíme dať pozor, aby sme ich nevytvorili nad sebou. Potom by totiž GM nevedel, na ktorý schod má reagovať (pretože ak sú schody nad sebou, môžu sa prekrývať ich x-ovej a y-ovej súradnice). Ešte doplním pridám kód pre vykreslenie schodisko.

Game maker - 3D hry
d3d_draw_block_z(0,160,0,100,180,10,background_get_texture(textura),4,1);
d3d_draw_block_z(0,140,0,100,160,20,background_get_texture(textura),4,1);
d3d_draw_block_z(0,120,0,100,140,30,background_get_texture(textura),4,1);
d3d_draw_block_z(0,100,0,100,120,40,background_get_texture(textura),4,1);
d3d_draw_block_z(0,0,0,100,100,50,background_get_texture(textura),4,4);
d3d_draw_block_z(100,0,0,120,100,60,background_get_texture(textura),1,4);
d3d_draw_block_z(120,0,0,140,100,70,background_get_texture(textura),1,4);
d3d_draw_block_z(140,0,0,160,100,80,background_get_texture(textura),1,4);
d3d_draw_block_z(160,0,0,180,100,90,background_get_texture(textura),1,4);
d3d_draw_block_z(180,0,0,200,100,100,background_get_texture(textura),1,4);

Určite si hneď všimnete, že ovládanie je ťažkopádne a ak sa snažíte "vyjsť" mimo oblasti schodisko, zostanete stále vo výške daného schodu, nespadnete na zem. Tento nedostatok by išiel eliminovať nejakú kontrolou výšky schodu a kamery, ale zdá sa mi to zbytočne zložité a nepraktické. Lepšie mi príde postaviť okolo schodiska múru, aby hráč nemohol mimo nich. Na lepšie ovládanie pre FPS hru, aj na rozumné riešenie múrov (opäť bez nutnosti objektu pre každú stenu zvlášť) sa pozrieme niekedy nabudúce.

V prílohe si môžete stiahnu kompletný zdrojový kód.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 575x (105.8 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - 3D hry
Článok pre vás napísal jendahruby
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity