Lekce 7 - XNA tvorba ve 3D - Engine integrace do hry
Vítejte po osmé. V minulé lekci, XNA tvorba ve 3D - Engine podruhé a ne naposledy, jsme si dokončili základ našeho 3D enginu.
V dnešním díle psaném od šesti ráno se podíváme na to, jak námi
vytvořený místy balast používat. Už v prvním díle o enginu jsme si
nalinkovali výslednou knihovnu do projektu se hrou. Otevřeme si tedy soubor
Game1.cs
. Vložíme jmenný prostor s enginem:
using VodacekEngine;
Dále si vytvoříme proměnnou, kde budeme engine skladovat:
Engine Engine;
A v metodě LoadContent
ji inicializujeme. Je to nutné provést
právě zde a nikde jinde. Protože je možné, že ihned po vytvoření enginu
přidáme okno a nějaké ty komponenty a ty budou potřebovat nahrát
obsah.
Engine = new Engine(this);
Engine by tedy byl připravený. Do metod Update
a
Draw
přidáme volání stejných metod našeho enginu a veškerá
příprava ve hře je hotova.
Engine.Update(gameTime);
a
Engine.Draw(gameTime);
Skvěle. Vše podstatné jsme provedli. Jak vidno implementace je velmi
snadná. Když nyní pustíme naši hru, vidíme naše krásné modré nic.
Může se zdát, že celé to martyrium jsme podstoupili zbytečně, protože
výsledek je stejný jako předtím. Vytvoříme si tedy naši první
komponentu. Nebude to nic světoborného, pouze barevné pozadí. Přidejme si
tedy do enginu složku Components
, kde budeme naše komponenty
skladovat. Uvnitř pak soubor BarevnePozadi.cs
nebo jakýkoliv
název, který vás pro to napadne. Učiníme třídu veřejnou. Pozměníme
jmenný prostor tak, aby se shodoval s tím u enginu. Přidáme také knihovny
XNA
:
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics;
Nezapomeňte také, aby třída dědila ze třídy
Component
.
namespace VodacekEngine{ public class BarevnePozadi: Component{ } }
Naše nová komponenta bude v konstruktoru přebírat barvu a s tou bude posléze "čistit" celou obrazovku okna. Vytvoříme si tedy konstruktor přebírající v parametru naši barvu a také proměnnou, kde si barvu budeme schovávat:
public Color Barva{ get; set; } public BarevnePozadi(Color barva){ Barva = barva; }
Dále bude potřeba přepsat metodu Draw
, kde potom pouze naší
barvou vyčistíme celé herní okno. Jistě si vzpomenete, že tento příkaz
jsme již potkali ve hře samotné. Musíme se přes herní okno ve kterém
komponenta bude umístěna dostat k enginu ,kde máme instanci třídy
GraphicsDevice
a tam zavolat metodu Clear
:
public override void Draw(){ Parent.Engine.GraphicsDevice.Clear(Barva); }
Nyní je vše připraveno. Vrátíme se do třídy s naší hrou, konkrétně
do metody LoadContent
, kde na nás čeká vytvořená instance
enginu. Přidejme si tam proměnnou okno s herním oknem. Pojmenujeme si jej
přízračně jako okenko:
GameScreen okno = new GameScreen("okenko");
Toto okno přidáme na vrchol našeho zásobníku v enginu:
Engine.PushGameScreen(okno);
A do okna přidáme nově vytvořenou komponentu našeho barevného pozadí s oranžovou barvou:
okno.AddComponent(new BarevnePozadi(Color.Orange));
To je vše. Opravdu je to vše. Více toho potřeba udělat není. Když si
nyní hru spustíme, uvidíte namísto modré barvu oranžovou. Tedy pokud
někde nemáte chybu. Pořadí, které jsem naznačil výše, je nutné
dodržet. Nejprve přidáváme herní okno do enginu a pak komponenty do něj.
Tento způsob se ovšem hodí pouze pro potřeby testování. Je rychlý na
napsání, ale většinou budeme používat způsob jiný. Vytvoříme si
třídu, která bude dědit od našeho herního okna. Nazveme si ji třeba
MojeHerniOkno
. Opět ji učiníme veřejnou a přidáme potřebné
jmenné prostory:
using VodacekEngine; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics;
Třída bude dědit od herního okna takže to provedeme a vytvoříme konstruktor:
public MojeHerniOkno() : base("Moje herni okno"){ }
Komponenty budeme přidávat jak jsem naznačil v minulém díle v
chráněné metodě Load
, proto si ji přepíšeme a přidáme v
ní naše oranžové pozadí:
protected override void Load(){ AddComponent(new BarevnePozadi(Color.Orange)); }
Zbavíme se předešlého kódu a v metodě LoadContent
přidáme naše herní okno:
Engine.PushGameScreen(new MojeHerniOkno());
Nic více nic méně. Pokud nyní hru spustíme, uvidíme krásně oranDžové okno.
Uf. Byla to místy fuška dostat vás všechny až sem. Alespoň doufám, že
jsem vás dostal všechny až sem. Pokud by byl někde problém, tak víte kde
se máte ptát buď v komentářích zde pod článkem nebo porovnejte svůj
výsledek s mojím. A co příště? Popravdě nevím, ale stejně je to jedno,
bude konec světa, takže to vlastně i bude jedno. Jako úkol byste si ale
mohli zkusit vytvořit komponentu, která by měnila barvu v čase (použili
byste metodu Update
) třeba od jedné barvy k druhé.
A teď už vážně . V příští lekci, XNA tvorba ve 3D - Sprity a Text, se podíváme na Sprity a Text.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 264x (1.59 MB)
Aplikace je včetně zdrojových kódů v jazyce C#