Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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. :-)

Herná obrazovka enginu v XNA - Základy 3D grafiky a tvorba enginu

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#

 

Predchádzajúci článok
XNA tvorba v 3D - Engine druhýkrát a nie naposledy
Všetky články v sekcii
Základy 3D grafiky a tvorba enginu
Preskočiť článok
(neodporúčame)
XNA tvorba v 3D - Sprit a Text
Článok pre vás napísal vodacek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Vodáček dělá že umí C#, naplno se již pět let angažuje v projektu ŽvB. Nyní studuje na FEI Upa informatiku, ikdyž si připadá spíš na ekonomice. Není mu také cizí PHP a SQL. Naopak cizí mu je Java a Python.
Aktivity