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 schodiště v GameMakeru

Ačkoli byl program Game Maker vytvořen primárně pro tvoru 2D her, jeho plná verze podporuje i hry ve 3D. Názory na smysluplnost tvorby 3D her v GM se různí - existují jak přívrženci, tak i přesvědčení odpůrci. Pravdou je, že 3D tvorba v GM je značně omezená, až primitivní. GM zvládá vykreslení pouze elementárních těles typu krychle či válce, postrádá možnost jednoduchého importu prostorových těles vytvořených v jiných programech atd. Tvořit 2D skákačky je sice pěkné, ale teprve přechod do 3D je to pravé, protože tvoříme simulaci našeho světa v PC. Tvorba her ve 3D grafice je ovšem velice složitá a zdlouhavá, pomocí různých "klikátek" těžko zrealizovatelná. Nabízí se využít XNA. Tato platforma se jeví svou obrovskou potencí jako dokonalý nástroj pro tvorbu her, ač už 2D nebo 3D, ovšem kdo nevládne C#, nevládne ani XNA. Pro vývojáře-začátečníka se tedy cesta stáčí opět k Game Makeru. Osobně vidím situaci tak, že rozumný způsob proniknutí do tvorby 3D her je vytvořit první 3D projekt v GM a poté přejít do sféry profesionálnější, např. do výše zmíněného XNA. Proto jsem se rozhodl napsat tento článek, abych ukázal, že i při použití jednoduchého kódu GM zvládne vytvořit zajímavé věci, nezbytných v běžných 3D hrách.

Jako příklad jsem zvolil schodiště. Jak ve 3D módu zajistit, aby v FPS hře kamera reagovala na schody a umožnila na ně vystoupit a sestoupit? Hledal jsem nějaké smysluplné řešení, ale i v zahraničních diskuzích lidé pouze doporučovali vytvořit spoustu objektů, přičemž každý by při kolizi s kamerou zvýšil/snížil její výšku o určitou hodnotu na prostorové ose z. tento způsob řešení zdá se mi poněkud nešťastný, vývojář je nucen kvůli každému jednomu schodu zvlášť vytvořit nový objekt a umístit do do místnosti. Co mi tedy zbývalo nežli najít způsob vlastní. Výsledek se mi zdá uspokojivý, proto jsem se ho rozhodl zveřejnit

Jako první si v GM vytvoříme nový objekt, do kterého napíšeme veškerý kód pro vykreslení schodišť, poté můžou přijít sněny apod. Do eventu Draw napíšeme kód pro vykreslení podlahy a bloku, který bude za chvíli tvořit první schod našeho schodiště.

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

Hru spustíme, výsledek by měl vypadat nějak takto:

GameMaker - 3D hry

Pěkné. Pokud s FPS kamerou přes tento schodek přejdeme, samozřejmě se nic nestane. Je asi jasné, že poloha kamery ve výšce nemůže být pevně daná, ale že musí být její výška proměnlivá, aby umožňovala pohyb po schodišti nahoru a dolů. Vytvoříme tedy promněnou pro výšku kamery, nazveme ji logicky z. Aby se kamera nacházela dole na zemi, přidáme k ní nějakou hodnotu, já zvolil 60. V kódu pro kameru by tedy mělo vzniknout něco jako 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 vytvoření funkčního schodiště. Nejdříve musí GM ověřit, zda se x-ová a y-ová pozice kamery nachází na schodu.

GameMaker - 3D hry

Pozice kamery tedu musí být větší než body x min a y min a zároveň menší než body x max a y max. Tím se zajistí, že se kamera nachází na schodu. Nyní se již můžeme vrhnout na napsání funkce umožňující vrácení výšky schodu, která se přičte k výšce kamery. Funkce se v GM tvoří jako skripty. Klikněte na "Create a script". Otevře se soubor pro psaní kódu. V kolonce name script pojmenujeme. Pokud upravujeme již existující funkci, jako třeba teď, je pěkný zvyk jako jméno skriptu použít jméno upravované funkce, ale s koncem rozšířeným o popis funkce. My budeme používat funkci pro vykreslení bloku, název jsem tedy zvolil d3d_draw_block_z. Do skriptu vložíme následující 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 první části je funkce vykreslující blok, tedy náš schod. Argumenty 0 - 8 reprezentují atributy funkce, tedy pozici, použitou texturu atd. Jasné. Podmínka if tvoří samotné jádro problému "Jak vytvořit schodiště". Podmínka zkontroluje, zda se pozice kamery nachází na schodu, jak jsem popisoval dříve (u mě kameru vykresluje objekt o_player, vy si tedy kód vhodně přepište). Pokud je podmínka platná, funkce přiřadí proměnné z (výšce kamery) atribut argument5, tedy hodnotu z2 - výšku schodu. No a to je vše! Jak jednoduché. V kódu kamery se k hodnotě z přičte konstanta 30 a kamera se zvedne.

Nyní se vrátíme do draw eventu objektu, který zajistil vykreslení nefunkčního schodu a funkci d3d_draw_block přepíšeme na d3d_draw_block_z. atributy necháme stejné. Hru spustíme a co se nestane! Pokud jsme vše napsali správě, kamera na schod opravdu zareaguje a zvedne se od země o hodnotu 10!! Blahopřeji. Teď již již můžeme tvořit libovolná schodiště, jen si musíme dát pozor, abychom je nevytvořili nad sebou. Pak by totiž GM nevěděl, na který schod má reagovat (protože pokud jsou schody nad sebou, mohou se překrývat jejich x-ové a y-ové souřadnice). Ještě doplním přidám kód pro vykreslení schodiště.

GameMaker - 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čitě si hned všimnete, že ovládání je těžkopádné a pokud se snažíte "vyjít" mimo oblast schodiště, zůstanete stále ve výšce daného schodu, nespadnete na zem. Tento nedostatek by šel eliminovat nějakou kontrolou výšky schodu a kamery, ale zdá se mi to zbytečně složité a nepraktické. Lepší mi přijde postavit kolem schodiště zdi, aby hráč nemohl mimo ně. Na lepší ovládání pro FPS hru, i na rozumné řešení zdí (opět bez nutnosti objektu pro každou zeď zvlášť) se podíváme někdy příště.

V příloze si můžete stáhnou kompletní zdrojový kód.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 575x (105.8 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

Všechny články v sekci
GameMaker - 3D hry
Článek pro vás napsal jendahruby
Avatar
Uživatelské hodnocení:
10 hlasů
Aktivity