Diskuze: Formát pro uložení hry ? (Unity3D)
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 40 zpráv z 40.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
Zkus se mrknout na youtubovy kanal Speed Tutor. Udelal malou serii na jednoduche ukladani s EasySave.
https://m.youtube.com/watch?v=UMpGJuf6h24
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/…vs.110).aspx tady se koukni mrkev,.
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>
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
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.
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í.
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
A Jó 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
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
Vždiď binárka je v podstatě otisk paměti.... neumím si představit jak tam
budu hledat hodnoty podle jména
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.
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...
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á
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.
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:
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.
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
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;
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...?
Možná že chceš LINQ to XML - http://stackoverflow.com/…-to-read-xml. Ale vážně nechápu proč mermomocí vyžaduješ XML...
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.
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...
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
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
Promiň za offtopic reakci, ale docela mi to vypaluje oči, píše se " Vždyť "
Ou, to se omlouvám... chybička se vloudila. Příště se to už nestane
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).
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š..
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
Jinak díky všem
Dej si řešení na tento svůj příspěvek, protože jsi to konečně dal po 2 dnech dohromady
Asi napíšu knihu "Autista Programátorem : Řádek za dva dny"
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")
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 DataContractSerializer.
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)
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.
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
Teoreticky by to šlo ale neuvěřitelně se to prodraží.
Zjednodušený nákupní seznam :
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
takhle presne ale vznikaji ty budgetovky.. daji 10 000 za materialy.. poskladaji to, prodaji 1 000 kopii a jsou spokojeni..
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ů.
Zobrazeno 40 zpráv z 40.