Jak nahrát Content v MonoGame

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

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.


 

  Aktivity (1)

Článek pro vás napsal Jakub Lásko[Saarix]
Avatar
Věnuji se programování v C#, MonoGame a Unity.

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


 



 

 

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

Avatar
Petr G
Redaktor
Avatar
Petr G:

Při načítání textur s .png problém nemá :) Ale když potřebuju nahrát font, tak mi šlo jedině .spritefont. Neznáš nějaký formát, mimo .spritefont, se kterým si to poradí?

 
Odpovědět 2.11.2013 15:20
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Petr G
Theodor Johnson:

Fonty jsem ještě nezkoušel, ale asi nebude jiná možnost než to nechat projet XNAčkem

Odpovědět 2.11.2013 15:23
Přecházím na "Cross-Platform Development"
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

Ja na konvertovanie používam XNABuilder -http://source­forge.net/pro­jects/xnbbuil­der/
Je síce potreba mať nainsťalovaný XNA Game Studio, ale to nevadí.

Odpovědět 12.11.2013 17:03
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
Tomáš "CrashTest" Bitter:

Zjistil jsem, že pouze stačí soubory přetáhnout do složky Content a nastavit vlastnosti, pak to také funguje. Sice nejsou zkompilované, ale pro testování a další věci to stačí.

Odpovědět 1.2.2014 17:16
Need for Steve
Avatar
KlimiCZ
Člen
Avatar
Odpovědět 8.7.2014 20:15
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
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:

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:

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:

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
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 15. Zobrazit vše