7. diel - XNA tvorba v 3D - Engine integrácia do hry
Vitajte po ôsmej. V dnešnom diele písanom od šiestich ráno sa pozrieme
na to, ako nami vytvorený miestami balast používať. Už v prvom diele o
enginu sme si nalinkoval výslednú knižnicu do projektu sa hrou. Otvoríme si
teda súbor Game1.cs
. Vložíme menný priestor s enginom:
using VodacekEngine;
Ďalej si vytvoríme premennú, kde budeme engine skladovať:
Engine Engine;
A v metóde LoadContent
ju inicializujeme. Je to nutné vykonať
práve tu a nikde inde. Pretože je možné, že ihneď po vytvorení enginu
pridáme okno a nejaké tie komponenty a tie budú potrebovať nahrať
obsah.
Engine = new Engine(this);
Engine by teda bol pripravený. Do metód Update
a
Draw
pridáme volanie rovnakých metód nášho enginu a všetka
príprava v hre je hotová.
Engine.Update(gameTime);
a
Engine.Draw(gameTime);
Skvele. Všetko podstatné sme vykonali. Ako vidno implementácie je veľmi
jednoduchá. Keď teraz pustíme našu hru, vidíme naše krásne modré nič.
Môže sa zdať, že celé to martýrium sme podstúpili zbytočne, pretože
výsledok je rovnaký ako predtým. Vytvoríme si teda našu prvú komponent.
Nebude to nič svetoborné, iba farebné pozadie. Pridajme si teda do enginu
zložku Components
, kde budeme naše komponenty skladovať. Vnútri
potom súbor BarevnePozadi.cs
alebo akýkoľvek názov, ktorý vás
pre to napadne. Urobíme triedu verejnú. Pozmeníme menný priestor tak, aby sa
zhodoval s tým u enginu. Pridáme tiež knižnice XNA
:
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics;
Nezabudnite tiež, aby trieda dedila z triedy Component
.
namespace VodacekEngine{ public class BarevnePozadi: Component{ } }
Naša nová komponenta bude v konstruktoru preberať farbu as tou bude neskôr "čistiť" celú obrazovku okna. Vytvoríme si teda konštruktor preberajúci v parametri našu farbu a tiež premennú, kde si farbu budeme schovávať:
public Color Barva{ get; set; } public BarevnePozadi(Color barva){ Barva = barva; }
Ďalej bude potrebné prepísať metódu Draw
, kde potom iba
našej farbou vyčistíme celé herné okno. Iste si spomeniete, že tento
príkaz sme už stretli v hre samotnej. Musíme sa cez herné okno v ktorom
komponent bude umiestnená dostať k enginu, kde máme inštanciu triedy
GraphicsDevice
a tam zavolať metódu Clear
:
public override void Draw(){ Parent.Engine.GraphicsDevice.Clear(Barva); }
Teraz je všetko pripravené. Vrátime sa do triedy s našou hrou, konkrétne
do metódy LoadContent
, kde na nás čaká vytvorená inštancia
enginu. Pridajme si tam premennú okno s herným oknom. Pomenujeme si ho
přízračně ako okienko:
GameScreen okno = new GameScreen("okenko");
Toto okno pridáme na vrchol nášho zásobníka v engine:
Engine.PushGameScreen(okno);
A do okna pridáme novovytvorenú komponent nášho farebného pozadia s oranžovou farbou:
okno.AddComponent(new BarevnePozadi(Color.Orange));
To je všetko. Naozaj je to všetko. Viac toho potrebné urobiť nie je. Keď
si teraz hru spustíme, uvidíte namiesto modrej farbu oranžovú. Teda ak
niekde nemáte chybu. Poradie, ktoré som naznačil vyššie, je nutné
dodržať. Najprv pridávame herné okno do enginu a potom komponenty do neho.
Tento spôsob sa však hodí len pre potreby testovania. Je rýchly na
napísanie, ale väčšinou budeme používať spôsob iný. Vytvoríme si
triedu, ktorá bude dediť od nášho herného okna. Nazveme si ju treba
MojeHerniOkno
. Opäť ju urobíme verejnú a pridáme potrebné
menné priestory:
using VodacekEngine; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics;
Trieda bude dediť od herného okna takže to vykonáme a vytvoríme konštruktor:
public MojeHerniOkno() : base("Moje herni okno"){ }
Komponenty budeme pridávať ako som naznačil v minulom diele v chránenej
metóde Load
, preto si ju prepíšeme a pridáme v nej naše
oranžové pozadia:
protected override void Load(){ AddComponent(new BarevnePozadi(Color.Orange)); }
Zbavíme sa predošlého kódu a v metóde LoadContent
pridáme
naše herné okno:
Engine.PushGameScreen(new MojeHerniOkno());
Nič viac nič menej. Ak teraz hru spustíme, uvidíme krásne Orandžová okno.
Uf. Bola to miestami fuška dostať vás všetkých až sem. Aspoň dúfam,
že som vás dostal všetky až sem. Pokiaľ by bol niekde problém, tak viete
kde sa máte pýtať buď v komentároch tu pod článkom alebo porovnajte svoj
výsledok s mojím. A čo nabudúce? Popravde neviem, ale rovnako je to jedno
bude koniec sveta takže to vlastne aj bude jedno. Ako úlohu by ste si ale
mohli skúsiť vytvoriť komponent, ktorá by menila farbu v čase (použili by
ste metódu Update
) napríklad od jednej farby k druhej.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 264x (1.59 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#