7. díl - XNA tvorba ve 3D - Engine integrace do hry

C# .NET XNA game studio 3D grafika XNA tvorba ve 3D - Engine integrace do hry

Vítejte po osmé. 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. :-)

Herní obrazovka enginu v XNA

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é.


 

Stáhnout

Staženo 249x (1.59 MB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Článek pro vás napsal vodacek
Avatar
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.

Jak se ti líbí článek?
Celkem (3 hlasů) :
55555


 



 

 

Komentáře

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Takže tohle mi už jede v pohodě :) Komponenty máš pěkně udělané, ale pokud se nepletu, tak vůbec neuvyužíváš ty z XNA. Je k tomu nějaký důvod?

Odpovědět 21.12.2012 19:50
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
vodacek
Redaktor
Avatar
Odpovídá na David Čápka
vodacek:

ano, radši si napíšu svoje, vidím co se přesně děje je vše pod mojí kontrolou, žádné černé krabičky, ideální stav

 
Odpovědět 21.12.2012 20:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.