XNA - čtení txt souborů   zodpovězená otázka

C#, XNA

Dobrý den,

Dělám (poukouším se dělat) hru v XNA a potřebuji načíst txt soubor (jsou v něm data pro zobrazení mapy), bohužel nevím moc jak nato udělal jsem si na čtení map vlastní třídu, ale pořát nemůžu přijít na to jak načíst určená soubor.Zde ještě ukázka to co jsem vytvořil.

class LoadObject
    {
        public Vector2 itemVelocity;
        public Vector2 itemPosition;
        public int itemType;
        public TextReader map;
        public string line;

        public LoadObject()
        {
            Game a = new Game();
            ContentManager content = new ContentManager(a.Services, "Content");

            

            map = content.Load<TextReader>("Levels\\0");
            line = map.ReadLine(); 
        }

        
    }

S tímto kódem mi to vyhodí chybu že soubor nebyl nalezen.Nevíte prosím někdo jak na to ? předem děkuji za odpovědi

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Pokud to hlásí chybu, že soubor nebyl nalezen, pak ten soubor opravdu chybí, anebo se pro něj nepodařilo najít správný Content Importer a Content Pipeline ho neumí zpracovat.

Mrkněte, jestli ve složce bin/debug/content v adresáři projektu je soubor 0.xnb.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

0.xnb tam není myslím, že to bude asi tím, že u souboru 0.txt jsem nastavil buil action na none(snad se nemýlím).Pokud nastavím buil action na něco jiného, tak se to začne vztekat(nevím proč asi se tomu nelíbí formát txt).Dále si nejsem jistý tím ,jak jsem tam "dostal" to Service. Ve starter kits platfomer tam nikde nemuseli dělat novou instanci třídy game (akorát tam plácli Services a jde jim to mě to dělalo chybu). Nicméně to už je jedno, po úmorném a zdlouhavém hledání jsem našel ve starter kits platfomer to co jsem potřeboval a to bylo toto .

path = new LoadObject(Path.Combine(StorageContainer.TitleLocation, "Content/Levels/1.txt"));

StreamReader reader = new StreamReader(path)

I když jsem to nakonec vyřešil sám vážím si vaší odpovědi

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Tohle je řešení a je dobře, že jste vytrval a přišel na něj sám.

V XNA funguje věc, které se říká Content Pipeline. Protože na XBoxu není celý .NET a nejsou tam všechny funkce ze System.IO, System.Xml atd., soubory ve složce Content se proženou přes Content Importer a Content Processor (ten se vybírá v okně vlastností). Pro některé typy souborů je v XNA už vestavěný - třeba jpg, bmp, png, gif, wmv, fbx, x atd. Pro typ txt ale evidentně žádný nebyl - proto se musela Build Action nastavit na None, jinak to hlásilo chybu.

Řešením je tedy buď obejít Content Pipeline a smířit se s tím, že to na XBoxu asi nespustíme (nevím, jestli LoadObject a TextReader XBox podporuje), anebo se dá do Content Pipeline dopsat vlastní Content Processor, což je třída, která soubor vezme, v době kompilace (která probíhá vždy na PC a kde celý .NET máme) soubor zpracovat a vyplivnout z něj nějaký objekt.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za vysvětlení. Vlastní Content Processor dělat nebudu to by pro mě bylo asi ještě moc složité, to že to asi nepůjde na Xboxu mi zatím nevadí stejně žádný nemám. Hra kterou dělám slouží pouze pro moje učení, takže to, že by to někdo chtěl hrát na Xbou asi zatím moc nehrozí :D.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback