Diskuze: Formát pro uložení hry ? (Unity3D)

C# .NET .NET (C# a Visual Basic) Formát pro uložení hry ? (Unity3D) American English version English version

Avatar
Garrom Orc Shaman:

Zdravím všechny. Nezná někdo formát do kterého bych mohl zapisovat int, float, string a bool a mohl k hodnotám snadno přistupovat ?

//Příklad
int money = ser.ReadInt("savedMoney");
ser.WriteInt(money, "savedMoney");

"ser" je odkaz na serializér, ne rozkaz k vykonání potřeby...... jen zmiňuji :-`

Zkrátka abych k hodnotám mohl přistupovat pomocí jména hodnoty a nemusel hledat v polích řádků (představte se že jedna uložená hra má 28 řádků... uložených her je 80). Přemýšlel jsem o .ini souborech (podobně jako to bylo v nástroji Game Maker) bohužel Unity3D (spíše celý .net) neposkytuje vestavěné řešení pro práci s .ini soubory.

Existuje nějaká alternativa k .ini souborům kde bych mohl hledat hodnoty podle jména ?

  • DrMrkev
Odpovědět 25. září 20:02
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Xan95
Člen
Avatar
 
Nahoru Odpovědět 25. září 20:39
Avatar
Elisse
Člen
Avatar
Odpovídá na Xan95
Elisse:

Jo ! :D Dlouho nerefreshnutá stránka :)

 
Nahoru Odpovědět 25. září 20:55
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:

Spíše se koukni na AppSettings, to je asi nejbližší alternativa k .ini souborům. Btw, zrovna na ty .ini soubory by jsi na 100% něco našel na nugetu, vždyť to i sám napíšeš za pár minut.

 
Nahoru Odpovědět 25. září 20:56
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Garrom Orc Shaman
D0ll0k:

Zkus se mrknout na youtubovy kanal Speed Tutor. Udelal malou serii na jednoduche ukladani s EasySave.

https://m.youtube.com/watch?v=UMpGJuf6h24
Nahoru Odpovědět 25. září 21:20
Ten, co se snaží "programovat"
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

nechce nahodou ukladat ulozene hry? proc tedy tady vsichni doporučujete .ini, .xml nebo NEDEJBOZE appsettings... ?

Vše to bude jen 100x složitější než naprosto primitivní serializace do binárního souboru:

https://msdn.microsoft.com/…ary/c5sbs8z9(v=vs.110).aspx tady se koukni mrkev,.

 
Nahoru Odpovědět 25. září 23:41
Avatar
Garrom Orc Shaman:

ten .xml soubor vypadá použitelně :-)
Marian Benčat měl jsem za to že do binárky se ukládají objekty a ne hodnoty(možná se pletu)

<?xml version="1.0" encoding="utf-8"?>
<SavedGamesFile>
  <SavedLevel>3</SavedLevel>
  <SavedMoney>250</SavedMoney>
  <SavedName>HardGuy</SavedName>
</SavedGamesFile>
Nahoru Odpovědět 26. září 15:11
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Garrom Orc Shaman:

mám menší problém, zápis jde v pohodě ale když chci číst pomocí tohoto kódu :

public static void Main(string[] args)
{
        using (XmlReader xr = XmlReader.Create(@"soubor.xml"))
        {

        }
}

dostanu tyto chyby

  • V oboru názvů XmlReader neexistuje název typu nebo oboru názvů Create (pravděpodobně jste neuvedli odkaz na sestavení). (CS0234)
  • XmlReader je obor názvů, ale používá se jako typ.

nevím přesně jek to funguje teď ale zkoušel jsem net.framework 3.5 a 4.0 a na obou se stejným výsledkem.

Nahoru Odpovědět 26. září 16:24
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Marian Benčat
Jan Vargovský:

Co máš proti appsettingům lol?

 
Nahoru Odpovědět  -1 26. září 17:38
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:

appsetting sám generuje xml dokument s nastavením, já nechci automaticky generované dokumenty protože nad nimi nemám plnou kontrolu. Představ si že později udělám editor uložených pozic.... který nebude fungovat protože přesně nevím co je uvnitř xml dokumentu. Když budu xml dokument vytvářet sám nejen že budu přesně vědět co v něm je ale navíc tam budu moct dávat uložené pozice, nastavení a údaje sdílené mezi všemi uloženými hráči (např. aktivovaný cheat-mod, ocenění nebo secrety).
proti appsettingům nic nemám jen to zrovna v tomto případě nevidím jako nejvhodnější řešení.

Nahoru Odpovědět  +1 26. září 18:10
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:

To jsem se neptal tebe, ale nevadí. Původně jsem četl alternativa k .ini, tak mě jako první napadla appsettings sekce, každopádně po tom, co tu čtu co přesně potřebuješ se to opravdu nehodí. Jen mě zajímá reakce od Mariana, jestli má snad na settingy aplikace něco lepšího :)

 
Nahoru Odpovědět 26. září 18:22
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:

A Jó :-D jsem si vůbec nevšimnul že to není pro mně... mně se ukázalo upozornění ale jestli to byla reakce na můj komentář nebo jen přibyl komentář do vlákna co jsem založil tam nikde nepíšou ...
to potvrzuje jednu z mích hlášek :

Každý je občas idiot, záleží na tom jak často a na jak dlouho

Nahoru Odpovědět  +1 26. září 18:46
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:

Marian Benčat má něco "lepšího" na ukládání nastavení .... Soudě podle komentáře mu na to připadá vhodný binární zápis :-D :-D :-D
Vždiď binárka je v podstatě otisk paměti.... neumím si představit jak tam budu hledat hodnoty podle jména :-D

jinak ten problém z 8th příspěvku pořád platí... byl bych rád kdyby mi někdo pomohl jelikož mně to brzdí od práce.

Nahoru Odpovědět 26. září 19:44
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Lukas C#:

Vytvoř si třídu, která bude odsahovat dejme tomu slovník (když chceš hledat dle jména) - ta bude reprezentovat uloženou hru. Při uložení to serializuješ, a při načítání deserializuješ - dostaneš ten objekt se slovníkem. V něm pak budeš hledat dle jména. 80x28 řádků snad není takový nápor na RAMku...

 
Nahoru Odpovědět  +1 26. září 20:09
Avatar
Odpovídá na Garrom Orc Shaman
Luboš Běhounek (Satik):

Vždiď binárka je v podstatě otisk paměti.... neumím si představit jak tam budu hledat hodnoty podle jména

Binárka není otisk paměti, binárka je akorát soubor, do kterýho data neukládáš v formě čitelný pro člověka (resp. to není tvoje priorita, ale např. stringy v běžný binárce obvykle přečteš), takže např. čísla jsou v binární formě.

V binárce nehledáš nic podle jména, tam přesně víš, kde co máš a prostě to načteš do nějaký struktury, který to odpovídá :)

Nahoru Odpovědět  +2 26. září 20:17
:)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:

On to myslel ale dobře. Ty si přece ty hodnoty při ukončení serializuješ (uložíš) a pak při znovu spuštění si je deserializuješ (načteš) a pracuješ pořád s tvými proměnnými nebo nějakou instanci.

 
Nahoru Odpovědět  +1 26. září 20:43
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Proti appsettings nemám vůbec nic.. ale opravdu to není místo, kam bys měl ukládat nějaké věci typu save game, kde:

  1. pokud možno nechceš, aby ti to každý vocas mohl zeditovat
  2. struktura appsettings bude hodně růst s každým dalším savem, to je poměrně nežádoucí
  3. Poměrně na prd se s tim pracuje...

Díky bohu za lidi, kteří ví jak funguje serializace a deserializace a je jim tedy jasný, že si můžou objekt (třeba Dictionary) serializovvat binárně, uložit do souboru a vice versa..

Jsou tedy schopni bez problemu při spuštění programu načíst všechny .bin soubory, deserializovat a mají veškerou práci hotovu, protože mají
List<SaveGame> a tedy s tím už pracují jako s objektem.

 
Nahoru Odpovědět  +2 26. září 20:57
Avatar
Garrom Orc Shaman:

Dobrá, už mlčím. Ale docela by mně zajímalo jak vyřešit problém z osmého příspěvku, pořád platí, pro jistotu ho zopakuji.
Z tohoto kódu :

public static void Main(string[] args)
{
        using (XmlReader xr = XmlReader.Create(@"soubor.xml"))
        {

        }
}

dostanu tyto chyby

  • V oboru názvů XmlReader neexistuje název typu nebo oboru názvů Create (pravděpodobně jste neuvedli odkaz na sestavení). (CS0234)
  • XmlReader je obor názvů, ale používá se jako typ.
Nahoru Odpovědět 27. září 9:32
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Odpovídá na Garrom Orc Shaman
Garrom Orc Shaman:

Dobrá, v kódu problém není, třída System.Xml byla poškozená tak jsem .net opravil pomocí instalačního balíčku.
Když už máme formát nastává otázka jak číst podle jména aneb. abych nemusel projíždět všechny řádky a jen zadal jméno elementu jehož hodnotu chci. Díval jsem se na zdejší učební materiály a tam je dokument projížděn řádek po řádku. Existuje nějaká možnost jak posunout reader na element s určitým jménem ? něco jako :

// Je to jen příklad, metoda nejspíše neexistuje, xr je reference na instanci XmlReader
Player.Hp = xr.GoToElement("SavadHealth").Value;
Nahoru Odpovědět 27. září 14:41
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:

Muzu se opet zeptat.. kdyz uz tedy chces pouzivat XML z nejakeho duvodu.. proc tedy neserializujes / nedeserializujes do XML? Pak takoveto veci totiz ABSOLUTNE nemusis resit.. proste si nadefinujes tridu, ktera reprezentuje tvuj save game.. Ať je to klidně na styl dictionary, pokud tam budeš mít spoustu klíčů.. ale proč se pachtit s xpathem a dalsima vecma...?

 
Nahoru Odpovědět  +1 27. září 15:04
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Lukas C#:

Možná že chceš LINQ to XML - http://stackoverflow.com/…-to-read-xml. Ale vážně nechápu proč mermomocí vyžaduješ XML...

 
Nahoru Odpovědět 27. září 15:12
Avatar
Garrom Orc Shaman:

Xml bych chtěl používat protože mi bylo naznačeno že z xml dokumentu můžu vyžadovat hodnotu jen za pomocí jména jako tomu bylo v nástroji Game Maker s použitím .ini ....
začínám pochybovat že to je pravda a začínám si myslet že není možné z nějakého souboru chtít hodnotu aniž bych musel ručně projel všechny řádky.
také bych chtěl formát do kterého bych mohl tímto způsobem ukládat hodnoty (jen hodnoty, ne objekty) což měl být xml dokument.

Nahoru Odpovědět 27. září 15:37
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Lukas C#:

protože mi bylo naznačeno že z xml dokumentu můžu vyžadovat hodnotu jen za pomocí jména

Na tohle přece slouží slovník - třída Dictionary. Tu už bys měl znát. Já a Marian Benčat se ti to snažíme opakovaně naznačovat. Už se mi to nechce psát znovu, pojeď si dřívější příspěvky - serializace a deserializace...

 
Nahoru Odpovědět 27. září 15:41
Avatar
Odpovídá na Lukas C#
Garrom Orc Shaman:

Jo ahá ... to naznačování slovníku mi trochu ujelo (respektive jsem nad tím slovem nepřemýšlel a měl za to že myslíte nějaký česko - programátorský slovník... proč mi někdo neřekl hned že to je třída ?).
Myslím že se na ten slovník podívám :-)

Nahoru Odpovědět 27. září 15:47
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Odpovídá na Lukas C#
Garrom Orc Shaman:

Vždiď slovník je generická kolekce.... můžu do něj uložit jen jeden dat.typ možná bych mohl použít jako dat.typ třídu object (jelikož to je parrent ostatních datových typů) ale nejsem si jist jestli by to fungovalo

Nahoru Odpovědět 27. září 16:14
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
gcx11:

Promiň za offtopic reakci, ale docela mi to vypaluje oči, píše se " Vždyť "

 
Nahoru Odpovědět  +1 27. září 16:22
Avatar
Odpovídá na gcx11
Garrom Orc Shaman:

Ou, to se omlouvám... chybička se vloudila. Příště se to už nestane ;-)

Nahoru Odpovědět  +1 27. září 16:25
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Lukas C#:

No a do XML si můžeš uložit kolik dat. typů? Jeden - všechno je tam totiž text. Takže stejně budeš parsovat ze stringů. Jak říkáš, do Dictionary si můžeš uložit objekt, takže i když budeš přetypovávat, alespoň to bude mít nějaký pevný datový typ (jakože Integery, Stringy, Doubly zabalené v Object).

 
Nahoru Odpovědět 27. září 17:07
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:
Dictionary<string, string>

nebo

Dictionary<string, Person>

nebo cokoliv jineho.. tedy jak potřebuješ.. key bude string a hodnota může být cokoliv si umaneš..

Editováno 27. září 17:16
 
Nahoru Odpovědět 27. září 17:15
Avatar
Garrom Orc Shaman:

Tak jsem dal dohromady vše co jste tu řekli a funguje to...

Já fakt nevím komu to uznat jako řešení .... Zase se nehlaste všichni :-D

Jinak díky všem :-)

Nahoru Odpovědět  +1 27. září 17:19
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Lukas C#:

Dej si řešení na tento svůj příspěvek, protože jsi to konečně dal po 2 dnech dohromady :-D

 
Nahoru Odpovědět 27. září 17:22
Avatar
Odpovídá na Lukas C#
Garrom Orc Shaman:

Asi napíšu knihu "Autista Programátorem : Řádek za dva dny" :-D
Ale co, když se budu snažit... dokážu cokoliv (uznávám že látat nezvládnu ať se budu snažit sebevíc.I tak to zaokrouhlím na "Cokoliv")

Nahoru Odpovědět  +5 27. září 19:48
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:

Jo, to je úplný základ, který by si měl znát. Jestli to pak někdy nemusíš zkoumat a je ti šumák co tam je za data, tak použij tu binární serializaci (kvůli rychlosti), až narazíš na hranice XmlSerializeru, tak se podívej na DataContractSe­rializer.

 
Nahoru Odpovědět 27. září 20:38
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:

Dobře, díky za typ.
Zkoumat bych to potřeboval spíše ze začátku abych mohl uložené hry měnit a rychle se dostat do levlu který zrovna dělám(až to budu vydávat mám v plánu tam dát encoding)

Nahoru Odpovědět 28. září 12:15
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Tak jako. ja si myslim, ze to chapeme.. Unity3D láká na dělání her a snaží se dát najevo, že k tomu člověk nemusí vědět programovat a složí si hru z tutoriálů a scriptů ze storu...

it's a trap.

 
Nahoru Odpovědět  +2 28. září 12:21
Avatar
Odpovídá na Garrom Orc Shaman
Luboš Běhounek (Satik):

Asi napíšu knihu "Autista Programátorem : Řádek za dva dny"

To uz se mi s C++ taky parkrat stalo - dva dny clovek v C++ hleda, co zpusobuje nekde access violation, aby pak zjistil, ze je to nejaka blbina v nejaky uplne jiny casti kodu a oprava tkvi v prepsani par znaku :)

Nahoru Odpovědět  +2 28. září 12:53
:)
Avatar
Odpovídá na Marian Benčat
Garrom Orc Shaman:

Teoreticky by to šlo ale neuvěřitelně se to prodraží.

Zjednodušený nákupní seznam :

  • Platform mesh level pack 5.00 $
  • Platform script pack 2.50 $
  • Happy background music 4.00 $
  • Sfx 2.30 $
  • Game saving/loading scripts 2.70 $
  • Sprites pack 2.00 $
  • Particles pack 2.00 $
  • Advenced animation tool 4.00 $

Poznámka : ceny jsou spíše orientační.

Dohromady : 24.50 $
převedeno na koruny :
588.90 Kč
... Myslím že se vážně vyplatí to umět než vyhazovat peníze za něco co si můžeš udělat sám ;-)

Nahoru Odpovědět 2. října 18:39
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:

takhle presne ale vznikaji ty budgetovky.. daji 10 000 za materialy.. poskladaji to, prodaji 1 000 kopii a jsou spokojeni..

 
Nahoru Odpovědět  +1 2. října 18:50
Avatar
Odpovídá na Marian Benčat
Garrom Orc Shaman:

To musím souhlasit ale ušetřit se dá alespoň na skriptech v případě že ovládáš programovací jazyk a jsi schopen si je napsat sám. Kromě toho když si skripty napíšeš sám jsou přesně dělané pro tvůj projekt a nemusíš řešit jak přinutit pracovat společně různé kousky od různých autorů.

Nahoru Odpovědět 3. října 15:19
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
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 40 zpráv z 40.