Jak nahrát Content v MonoGame

C# .NET Tvorba her XNA game studio Jak nahrát Content v MonoGame

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Určitě jste již alespoň jednou řešili problém s tím, že když do složky Content v MonoGame projektu přetáhnete například nějaký obrázek a pak ho chcete vykresli, tak dostanete chybu. V dnešním článku se dozvíte jak do vašeho projektu vložit veškeré "obsahové" soubory.

Content v MonoGame

Content pipeline u Monogame zatím nefunguje jako u starého XNA. Takže není možné pouze přetáhnout obrázky, hudbu, atd... do složky Content a používat je. Prozatím je potřeba do složky Content nahrávat již zkompilované soubory typu .xnb

Další nevýhodou MonoGame je ta, že zde není možné jako u XNA vytvořit např. spriteFont. U XNA pouze zvolíte Add New Item a vyberete si spriteFont, ale zde opět MonoGame zaostává, takže je potřeba si daný spriteFont vytvořit v XNA a pak jeho .xnb verzi přesunout do MonoGame.

Vytvoření projektu v XNA

Kvůli veškerým důvodům uvedeným výše je potřeba mít založený projekt v XNA, přes který budeme kompilovat soubory. Vytvoříme si nový projekt v XNA a můžeme ho např. nazvat ContentCompilation.

XNA projekt

V tomto projektu budeme provádět veškerá kouzla. Já zde pro urychlení nevytvářím X instancí pro Texture2D, ale radši si vytvořím nový List<Texture2D> a do něj v metodě LoadContent nahraju všechny textury.

List<Texture2D> textures = new List<Texture2D>();

Pak vypadá metoda LoadContent asi takto.

protected override void LoadContent()
{
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);

        textures.Add(Content.Load<Texture2D>("Background"));
        textures.Add(Content.Load<Texture2D>("BlueJelly"));
        textures.Add(Content.Load<Texture2D>("BrownJelly"));
        textures.Add(Content.Load<Texture2D>("Bullet"));
        textures.Add(Content.Load<Texture2D>("GreenJelly"));
        textures.Add(Content.Load<Texture2D>("Ground"));
        textures.Add(Content.Load<Texture2D>("Player"));
        textures.Add(Content.Load<Texture2D>("RedJelly"));
        textures.Add(Content.Load<Texture2D>("Sugar"));
        textures.Add(Content.Load<Texture2D>("BulletAnimation"));
        textures.Add(Content.Load<Texture2D>("Exit"));
        textures.Add(Content.Load<Texture2D>("NewGame"));
        textures.Add(Content.Load<Texture2D>("P_MoveAnimation"));
        textures.Add(Content.Load<Texture2D>("ToxicJellyAnimation"));
        textures.Add(Content.Load<Texture2D>("ToxicJelly"));
}

Samozřejmě List se dá použít na vše, takže tam můžete "nasypat" hudbu, spriteFonty, atd... Jak jsem zmiňoval výše, tak je potřeba si zkompilovat i spriteFont pro MonoGame, takže pokud máte v úmyslu ho ve hře použít, tak si ho musíte vytvořit a nastylyzovat.

SpriteFont přidáte tak, že v projektu kliknete pravým tlačítkem na složku Content a vyberete Add New Item. Vyskočí na vás nabídka a tam už si vyberete SpriteFont. Pak se ukáže xml s nastavením fontu. Je potřeba font řádně nastavit, protože v MonoGame ho už pak nezměníte.

Zkompilované soubory

Jakmile máte v metodě LoadContent vše inicializováno, tak stačí pouze zmáčknout F5 a hru spustit. Tím se vám hra zkompiluje a vaše soubory jsou na světe.

Ale kde je hledat, že? Stačí jít do složky s projektem a proklikat se do složky bin, poté Debug a pak už bude vidět složku Content, ve které jsou vygenerované vaše .xnb soubory.

Cesta k souborům

Vložení do MonoGame

Nyní, když máme všechny soubory připravené, tak si otevřeme náš projekt v MonoGame a všechny .xnb soubory přesuneme do složky Content, která je automaticky v každém projektu.

Content

Zatím to ale nebude fungovat, protože je potřeba ještě něco nastavit. Následně je potřeba u každého souboru změnit 2 hodnoty v Properties. Je potřeba změnit Build Action na Content a Copy to Output Directory na copy if newer.

Content Properties

Jakmile jsou properties u všech souborů nastaveny, takže je můžete nahrát v mětodě LoadContent a hru spustit. Uvidíte že vše funguje jak má. Opět ještě doplním, že ani zde není potřeba u přiřazování jmen souborů v metodě LoadContent psát jméno souboru včetně přípony.

Pevně doufejme že se brzy v MonoGame zprovozní Content pipeline a vše bude chodit jak má a tento zdlouhavý krok budeme moct přeskočit. Snad tento návod pomůže hodně lidem.


 

 

Článek pro vás napsal Jakub Lásko[Saarix]
Avatar
Jak se ti líbí článek?
1 hlasů
Věnuji se programování v C#, MonoGame a Unity.
Aktivity (1)

 

 

Komentáře
Zobrazit starší komentáře (10)

Avatar
Juraj Mlich
Redaktor
Avatar
Odpovědět 9.7.2014 12:46
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
KlimiCZ
Člen
Avatar
Odpovídá na Juraj Mlich
KlimiCZ:9.7.2014 15:33

Uz sem to taky našel :)- asi jsem šikovný

Odpovědět  -1 9.7.2014 15:33
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:1.3.2015 9:40

Nejde mi nainstalovat XNA ;( , během instalace napíše Setup failed a skončí.
Mám Windows 8.1, režimy kompatibility nepomáhají.

Odpovědět 1.3.2015 9:40
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovědět 1.3.2015 9:54
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
Petr Nymsa:1.3.2015 18:14

Před instalací XNA nainstaluj ještě Games for Windows Live a půjde ti pak XNA nainstalovat :)

Odpovědět  +1 1.3.2015 18:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Honza Rada
Člen
Avatar
Honza Rada:15.8.2017 18:24

Mam problém přes noc mi zmizelo xna nevíte co se mohlo stát

Odpovědět 15.8.2017 18:24
#c#
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Honza Rada
Petr Nymsa:16.8.2017 8:46

Jak zmizelo? Samo od sebe nic zmizet nemuze

Odpovědět 16.8.2017 8:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Honza Rada
Člen
Avatar
Honza Rada:16.8.2017 9:33

Včera to mám, teď zapnu vs chci dát nový projekt a xna nemám na výběr ale soubory mám furt na stejném místě

Odpovědět 16.8.2017 9:33
#c#
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Luboš Satik Běhounek:16.8.2017 9:54

nekoukáš jen do jiné kategorie projektů nebo na projekty jiných jazyků? :)

Odpovědět 16.8.2017 9:54
https://www.facebook.com/peasantsandcastles/
Avatar
Honza Rada
Člen
Avatar
Honza Rada:6.10.2017 13:25

Neexistuje na to zvlášť program? Xna mi na kompu nejdw

Odpovědět 6.10.2017 13:25
#c#
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 10 zpráv z 20. Zobrazit vše