IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Miner

Aktivity
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:27.5.2012 21:30

Před pár dny jsem začal pracovat na takové menší 2D hře s názvem Miner.
Zatím je jen k dispozici Miner který se pohybuje po herním světě a sbírá rudy za které dostává zlaté. Svět je směrem dolů nekonečný, generuje se stále nový.
V budoucnu plánuji nějaké jednoduché animace, zvuky. U minera rychlost kopání, skladovací prostor -> kovy se budou prodávat v novém okně kde bude proměnlivý kurz.
Dále nějakou jednoduchou fyziku, takže i nějaký tryskoví pohon na vylepšování aby mohl jít Miner zpět navrch, z toho plyne že se bude kupovat i palivo.
Taky jsem přemýšlel nad občasnými zemětřesení kdy se sesype par kostek, dynamity.
Prostě nápadů mám spoustu teď je jen budu postupně implementovat do hry :)
V případě zájmu hodím link ke stažení této pre-alfa verze v podobě spustitelného .jar souboru. ;)

 
Odpovědět
27.5.2012 21:30
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:28.5.2012 8:33

Ahoj, určitě hoď link ;)

Nahoru Odpovědět
28.5.2012 8:33
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:28.5.2012 14:12

Tak link zde:
http://uloz.to/…iner-v01-rar
Heslo: fugiczek

 
Nahoru Odpovědět
28.5.2012 14:12
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:28.5.2012 14:32

Cením každou hru, která není naklikaná v GameMakeru :) Jakým způsobem to vykresluješ, používáš nějaký framework? Dost mi vadí, že nemohu šipky jen držet, ale musím je stále mačkat. Také by mě zajímalo, jakým způsobem spravuješ ten všemi směry nekonečný svět. Ty obrázky se mi vůbec nelíbí, stáhni si nějaké ikonky z iconarchive.com. koukej na licence, bude tam spousta diamantů, zlata atd.

Nahoru Odpovědět
28.5.2012 14:32
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:28.5.2012 14:39

Na vykreslování používám normální metodu paint(). Šipky šli držet ale pak jsem to změnil z důvodu dalších updatů kdy pohyby budou omezeny fyzikou. Svět je nekonečný jen směrem dolů, na to používám arraylist a při každém snížením dolů kde není ještě vygenerován obsah tak se vygeneruje jedna vrstva navíc. Obrázky chci mít své vlastní. Je to úplně první verze, grafiku budu určitě ještě několikrát měnit :)

 
Nahoru Odpovědět
28.5.2012 14:39
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:28.5.2012 16:29

Neměl jsem na mysli jméno metody, ale komponentu, na kterou kreslíš. Z tvé odpovědi jsem pochopil, že framework nepoužíváš a kreslíš na něco ze swingu, je to tak?

Nahoru Odpovědět
28.5.2012 16:29
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:28.5.2012 18:26

Používám Graphics, takže starší -> AWT :) Jinak kreslím na JPanel ze swingu. Takže taková kombinace :)

 
Nahoru Odpovědět
28.5.2012 18:26
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:28.5.2012 19:15

Obrázek z nově přidaného inventáře:
http://img204.imageshack.us/…minerinv.png

 
Nahoru Odpovědět
28.5.2012 19:15
Avatar
adam440
Tvůrce
Avatar
adam440:29.5.2012 17:41

To je zase další kopie Minecraftu akorát 2D. Je to pěkný ale velmi bych ocenil kdybys to předělal do 3D to by pak byla pecka.

 
Nahoru Odpovědět
29.5.2012 17:41
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na adam440
Fugiczek:29.5.2012 19:03
  1. kopie minecraftu to fakt není :) , nechal jsem se inspirovat jednou hrou co jsem kdysi jako malý hrával na superhrách, jenže už jsem ji nikdy nenasel tak si ji chci udelat
  2. v nejblizsi dobe 3D fakt delat nebudu, uz jenom z duvodu mé lenosti a slozitosti 3D ;)
 
Nahoru Odpovědět
29.5.2012 19:03
Avatar
adam440
Tvůrce
Avatar
Odpovídá na Fugiczek
adam440:29.5.2012 19:36

Jak jsem psal že je to kopie minecraftu tak to sem se nepodíval pořádně, je to vidět, pouze se mi to na první pohled zdálo podle té kostičkované grafiky.

 
Nahoru Odpovědět
29.5.2012 19:36
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:30.5.2012 16:09

Takze je k dispozici verze 0.2
Link zde:
http://uloz.to/…minerv02-jar

Novinky:

  • spousty zmen co se tyce zabezpeceni kodu + ruzne prekopavani kodu, ale to se vas netyka :D
  • pridan shop a inventar(omezen zatim na velikost 10, pak nejde kopat rudy, velikost se bude dat zvetcit vylepsenim nekdy v dalsich verzich)
  • u shopu promnenlivy kurz, meni se kazdych 5 minut
  • pridana gravitace(kdyz pod vama nic neni a nehejbete se tak padate pomalu dolu)
  • jde zase se pohybovat jen drzenim sipky, nemusite ted mackat furt dokola

Jen bych dodal ze inventar se otevira "ickem" a shop "eskem" :)

 
Nahoru Odpovědět
30.5.2012 16:09
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:30.5.2012 19:57

Odstranil bych tu prodlevu předtím, než se začne stisknutá klávesa opakovat (pokud to tedy nějak jde). Měl bys používat nějaký framework, který kreslí akcelerovanou grafikou a má lepší ovladače na klávesnici, jsou jich pro Javu desítky. Uděláš něco s tou grafikou? Mohlo by to vypadat o hodně líp. Jinak dobrej nápad s tou gravitací, připomíná mi to boulder dash, budou nepřátelé?

Nahoru Odpovědět
30.5.2012 19:57
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:30.5.2012 20:07

Na tu prodlevu kouknu do dalsi verze. Ano s grafikou neco udelam. Na ty frameworky se podivam. Tohle je teprv druhá verze co jsem vydal, nápadů mám spousty. Klidně přidám i nepřátelé, jen to nejaky cas potrvá. Pokud se mi nejaky framework zalíbí tak pristi verze nejdriv bude tak za tyden, mozna za dva. Spis ty dva, predelam tu grafiku a pridam framework kdyz jinak nedas :D
Jinak diky za kazdy nazor, bez nich bych se tak nehnal do vyvoje te hry :O

 
Nahoru Odpovědět
30.5.2012 20:07
Avatar
David Hartinger
Vlastník
Avatar
Nahoru Odpovědět
30.5.2012 20:17
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:30.5.2012 20:19

Nekoukal, kouknu :)
Jen se chci zeptat jestli mas nejaky framework ktery by jsi doporucil, premyslel jsem nad lwjgl, ale nevim jestli to neni zbytecne moc :(

 
Nahoru Odpovědět
30.5.2012 20:19
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:30.5.2012 20:37

V Javě moc nedělám, ale zahlédl jsem toto: http://jmonkeyengine.com/ a asi je to takový nejprofláklejší.

Nahoru Odpovědět
30.5.2012 20:37
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:30.5.2012 20:51

Ne tak ten je jen na 3D hry asi, koukni sem: http://www.java-gaming.org/index.php?…, ta libgdx vypadá dobře http://code.google.com/p/libgdx/ Si projdi ty 3 na 2D hry.

Nahoru Odpovědět
30.5.2012 20:51
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:30.5.2012 20:57

Ok díky, v pristi verzi uvidis vysledek ;)

 
Nahoru Odpovědět
30.5.2012 20:57
Avatar
Odpovídá na Fugiczek
Drahomír Hanák:30.5.2012 21:02

Na 2D grafiku se mi celkem líbí libGDX (viz. http://libgdx.badlogicgames.com/) S tímto frameworkem můžeš hry vyvíjet nezávisle na platformě. Stačí pak jen dopsat starter pro danou platformu (jsou podporované: Windows, Linux, MacOS a Android) a ten má kolem deseti řádků. Jinak na 3D mi taky příjde nejlepší ten jMonkeyEngine. Je na něj spousta tutoriálů, celkem velká komunita a má pěknou upoutávku :). Navíc má vlastní vývojové prostředí (založené na Eclipse), ve kterém se dobře pracuje.

 
Nahoru Odpovědět
30.5.2012 21:02
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Fugiczek:30.5.2012 21:50

Diky za nazor, zitra ten libGDX omrknu :)
jMonkeyEngine asi ne protoze na 3D grafiku si zatim netroufnu ;)

 
Nahoru Odpovědět
30.5.2012 21:50
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:1.6.2012 19:35

Takze to budu predelavat do libGDX, ale nevim jak dlouho mi to potrva. Celej kod musim psat od znova a navic je to celkem slozity (to se mi zdala i Java kdyz jsem ji poprve videl :D), zitra se zacnu prokousavat pomalu tridama co libGDX obsahuje a snad zacatkem tydne zacnu psat :) Navíc vsechny navody jsou anglicky a je jich malo, takze se ucit budu muset z dokumentace a nejakych zdrojaku co maji na strankach. Kazdej zdrojak je psanej jinym zpusobem takze uvidime jestli vubec neco vytvorim :D

 
Nahoru Odpovědět
1.6.2012 19:35
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:1.6.2012 21:52

Určitě dej pak vědět, budu se jí také časem zabývat, možná o ní i něco napíšu :)

Nahoru Odpovědět
1.6.2012 21:52
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:2.6.2012 14:11

Půl dne resim problem proc mi to nechce cist soubory. Zkousel jsem ruzne menit adresare a zpusoby cteni (Gdx.file.inter­nal/external/clas­spath). Nakonec jsem zjistil ze mu vadilo ze soubor ma dve koncovky napr. *.txt.txt
Nevím jestli mám davat vinu Winum ze jsou tak vypatlany ze davaji 2 koncovky a tvari se ze dali jen jednu. Nebo jave ze to neumi prechroustat :D
Nastesti jsem koncovky prepsal pomoci total commandera a muzu pokracovat dal :)
Ted mam sice problem kdyz najedu do menu hry tak mi java hodí fatal error, ale na to ze vcera jsem skoro vubec nic nevedel tak postupuji celkem dobre :)

 
Nahoru Odpovědět
2.6.2012 14:11
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:2.6.2012 14:33

Vypni si "Skrývat příponu souborů známých typů" v Ovládací panely -> Možnosti složky. To je první věc, co po instalaci Windows dělám :)

Nahoru Odpovědět
2.6.2012 14:33
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:2.6.2012 19:45

Náhled z meho postupu ve vyvoji :D

 Miner: Creating game
Miner: Retrieving profile
Miner: Resizing game to: 800 x 480
Miner: Showing screen: SplashScreen
Miner: Resizing screen: SplashScreen to: 800 x 480
Miner: Setting screen: SplashScreen
FPSLogger: fps: 0
FPSLogger: fps: 65
FPSLogger: fps: 63
Miner: Hiding screen: SplashScreen
Miner: Disposing screen: SplashScreen
Miner: Showing screen: MenuScreen
Miner: Resizing screen: MenuScreen to: 800 x 480
Miner: Setting screen: MenuScreen
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000fea411e0, pid=1072, tid=4432
#
# JRE version: 8.0-b41
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b12 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [msvcrt.dll+0x11e0]

toto se mi deje celý den ]:>

 
Nahoru Odpovědět
2.6.2012 19:45
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:3.6.2012 14:52

Tak, podarilo se mi konecne zprovoznit menu tak zde je nahled :)
http://img42.imageshack.us/…enumains.png

 
Nahoru Odpovědět
3.6.2012 14:52
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:4.6.2012 18:30

Potreboval bych poradit aspon od par lidi zde co by se vam vic libilo. Nekonecnej svet smerem dolů s omezením do stran (tak jak to bylo v predchozich verzich), nebo nekonecnej svet do stran s omezenou hloubkou (zde by slo regulovat vyskyt kovu vzhledem k hloubce). Slo by to i skombinovat ale to by bylo hard-core :D
Budu rad za kazdy nazor :)

 
Nahoru Odpovědět
4.6.2012 18:30
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Fugiczek
David Jančík:4.6.2012 18:44

Bylo by drsný to udělat že začínáš ve prostřed nekonečna. Aby to bylo prostě nekonečný na všechny strany.
Co ty tam používáš hashmapu?
Pokud by to zesložitilo celý algoritmus, pak bych volil asi doprava. Vypadá to, že jedeš za cílem. Kdežto dolů to je takový pád.

Nahoru Odpovědět
4.6.2012 18:44
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Jančík
Fugiczek:4.6.2012 18:52

Pred tim jsem pouzival normalne ArrayList, to do vsech stran budu muset vymyslet aby to zbytecne nezatezovalo moc pamet a taky zpusob ukladani toho sveta.

 
Nahoru Odpovědět
4.6.2012 18:52
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:4.6.2012 19:57

Ale od kdy kopeš do nebe? :)

 
Nahoru Odpovědět
4.6.2012 19:57
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na matesax
Fugiczek:4.6.2012 20:01

Tak treba muzu kopat nekde v cerne dire kde neni konce ani zacatku ;)

 
Nahoru Odpovědět
4.6.2012 20:01
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:4.6.2012 21:59

Můžeš si vytvořit objekt políčko a ty navazovat mezi sebou 4mi referencemi, svět potom poroste do nekonečna přesně tam, kam jdeš a snížíš zátěž paměti. Celé bys to obalil třídou Svet. Vzhledem k povaze hry by to ani nemuselo být náročné. Pokud tě dobře chápu, teď máš jednu stranu toho pole napevno, což mi přijde jako plýtvání pamětí. Nevím jak to má Java s implementací indexerů, ale teoreticky by šlo udělat, aby se ta struktura chovala navenek jako pole. Nevím, jak jsi na tom s algoritmizací, ale nemuselo by to být tak složité.

Nahoru Odpovědět
4.6.2012 21:59
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:5.6.2012 7:14

s tou jsem na tom spatne no :D logika jde mimo me :) ale tak trochu jsem premyslel a udelam to nekonecny do boku, do vsech stran je to takovy neprirozeny, navíc kdyz to bude do stran tak muzu upravit generovani kovu tak aby ty nejdrazsi byly dole a nahore na povrchu by byly obchody na vylepsovani atd... a jinak ten zpusob s tema referencemi vyzkousim, zatim si stejne jen hraju s menu, nastavenim a pripravou objektu na hru samotnou :)

 
Nahoru Odpovědět
5.6.2012 7:14
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 10:55

Uděláš si něco jako

class Policko
{
  public Policko vlevo = null;
  public Policko vpravo = null;
  public Policko nahore = null;
  public Policko dole = null;
  public int hodnota; // samotná hodnota - diamant, nic...
}

S tím, aby to vypadalo jako pole, jsem se asi spletl, bylo by to zbytečně neohrabané. Měl bys metody, co by ti vygenerovaly řadu takovýchto políček a to vlevo, vpravo, nahoře a dole. Další metoda by ti zpočátku vygenerovala obrazovku. Takto bys měl v paměti přesně to, co potřebuješ. Stačilo by ti potom udržovat si referenci na políčko, na kterém je hráč (to by bylo vždy uprostřed obrazovky). Podle této reference bys i obrazovku vykreslovat a podobně. Jestli si jen hraješ, tak to zkus, procvičí ti to mozek a budeš to mít opravdu chytře napsané :P

Nahoru Odpovědět
5.6.2012 10:55
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 11:14

Ještě dodám, že nevýhodou výše popsané struktury je nemožnost přistoupit na konkrétní souřadnice ve světě (např. 1241;351), ale to by snad nemělo vadit. Hrdina se pohybuje o 1 a pokud bys ho potřeboval např. někam telepotovat, bude mít teleport referenci na cílové políčko.

Nahoru Odpovědět
5.6.2012 11:14
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:5.6.2012 13:18

No ja si jen hraju, neplanuji verzi 0.3 vydat nekdy brzo. S tym svetem si jeste pohraju, potrebuju aby si to ty policka pamatovalo vsechny takze nejlepe aby se ty nepotrebny nekam zapisovaly.
Premyslel jsem ze ten svet rozdelnym na levou a pravou stranu. Pro kazdou stranu bych udelal dynamicky pole s polem a v nech bych ukladal ty jednotlivy policka. Nebo svet rozdelit na useky o urcite velikosti, napr 100x100, a kdyz bych byl na souradnicich x 100 tak by se vytvoril dalsi sektor...

 
Nahoru Odpovědět
5.6.2012 13:18
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 14:01

To je také řešení, ale ztíží se ti přesun mezi jednotlivými poli. Podle mne se pole k tvému případu vůbec nehodí.

Já bych to udělal tak, jak jsem ti radil, využiješ přesně tolik paměti, kolik potřebuješ a není to ani moc složité. Navíc to pak jednoduše uložíš třeba do listu a pak do souboru. Než přemýšlet nad nějakými dynamickými poli, které dělit na sektory, se už vyplatí se zamyslet pořádně a navrhnout kvalitní strukturu.

Nahoru Odpovědět
5.6.2012 14:01
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:5.6.2012 16:45

No kdyz se mi podari vyresit tato pekna chyba tak mam vyhrano :D

com.badlogic.gdx.utils.SerializationException: Field not found: world (java.util.ArrayList)
 
Nahoru Odpovědět
5.6.2012 16:45
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 17:14

To bys toho musel poslat víc :P Takhle nic nevidíme

Nahoru Odpovědět
5.6.2012 17:14
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:5.6.2012 17:26

WorldManager:

package com.fugiczek.miner.services;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Base64Coder;
import com.badlogic.gdx.utils.Json;
import com.fugiczek.miner.Miner;
import com.fugiczek.miner.domains.World;

public class WorldManager {

        private static final String WORLD_DATA_FILE="data/world/world-v1.json";

        private World world;

        public WorldManager(){}

        public World retrieveWorld(){
                FileHandle worldDataFile=Gdx.files.local(WORLD_DATA_FILE);

                Gdx.app.log(Miner.LOG, "Retrieving world from: " + worldDataFile.path());

                if(world!=null)return world;

                Json json = new Json();

                if(worldDataFile.exists()){
                        try{
                                String worldAsText=worldDataFile.readString().trim();

                                if(worldAsText.matches("^[A-Za-z0-9/+=]+$")) {
                    Gdx.app.log(Miner.LOG, "Persisted world is base64 encoded");
                    worldAsText = Base64Coder.decodeString(worldAsText);
                }

                                world=json.fromJson(World.class, worldAsText);
                        }
                        catch(Exception e){
                                Gdx.app.error(Miner.LOG, "Unable to parse existing world data file", e );

                world=new World();
                persist(world);
                        }
                }
                else{
                        world=new World();
            persist(world);
                }
                return world;
        }
        protected void persist(World world)
            {

                FileHandle profileDataFile = Gdx.files.local(WORLD_DATA_FILE);
                Gdx.app.log(Miner.LOG, "Persisting world in: " + profileDataFile.path() );

                Json json = new Json();

                String profileAsText = json.toJson(world);

                if( !Miner.DEV_MODE ) {
                    profileAsText = Base64Coder.encodeString( profileAsText );
                }

                profileDataFile.writeString( profileAsText, false );
            }

            public void persist()
            {
                if( world!= null ) {
                    persist(world);
                }
            }
}

A svet:

package com.fugiczek.miner.domains;

import java.util.ArrayList;
import java.util.List;

import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.Json.Serializable;
import com.badlogic.gdx.utils.OrderedMap;

public class World implements Serializable{

        public List<Box> world=new ArrayList<Box>();

        public World(){world.add(new Box(Ores.STONE));}

        @Override
        public void read(Json json, OrderedMap<String, Object> jsonData) {
                json.readField(world, "world", Box.class, jsonData);
        }

        @Override
        public void write(Json json) {
                json.writeValue("world", world);
        }

}

A presna chyba:

Miner: Unable to parse existing world data file
com.badlogic.gdx.utils.SerializationException: Field not found: world (java.util.ArrayList)
        at com.badlogic.gdx.utils.Json.readField(Json.java:616)
        at com.badlogic.gdx.utils.Json.readField(Json.java:603)
        at com.fugiczek.miner.domains.World.read(World.java:18)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:722)
        at com.badlogic.gdx.utils.Json.fromJson(Json.java:591)
        at com.fugiczek.miner.services.WorldManager.retrieveWorld(WorldManager.java:36)
        at com.fugiczek.miner.Miner.create(Miner.java:42)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:144)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)

Chyba je v tom ze pri cteni v tom objektu world nevidí to pole, ale nevím proc...

 
Nahoru Odpovědět
5.6.2012 17:26
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 17:38

To je divné, ten json soubor je uvnitř určitě ok? Aby to nebylo, že world není v tom jsonu, ne v Java kódu.

Nahoru Odpovědět
5.6.2012 17:38
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:5.6.2012 17:41

díval jsem se a je tam zapsanej takhle:

{"world":[{"class":"com.fugiczek.miner.domains.Box","down":null,"left":null,"ore":"STONE","up":null,"right":null}]}

Podobny zpusob zapisovani a cteni mam u ProfilManageru jenze tam zadny pole neni, tam jsou jen promenne a to funguje...

 
Nahoru Odpovědět
5.6.2012 17:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:5.6.2012 17:48

Já s jsonem nikdy nedělal, takže tady bohužel nemůžu sloužit. Já bych postupoval tak, že bych si zkusil někde bokem (třeba v novém projektu) vytvořit takové pole a uložit ho a následně načíst do jsonu. Mám zkušenosti, že řešit tohle v originálním projektu je matoucí a když je to čisté, člověk na to spíše přijde.

Nahoru Odpovědět
5.6.2012 17:48
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:5.6.2012 17:59

Urcite to timhle postupem vyzkousim, dekuji za radu. Vyzkousim ruzne konstruktory readField (ma jich asi +-6) a vyzkousim to i s ruznymi typy pole. Snad na tu chybu prijdu :)
Zitra se ozvu jak jsem dopadl, dneska uz jsem toho udelal dost, takze dneska mam padla :D

 
Nahoru Odpovědět
5.6.2012 17:59
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Fugiczek
Kit:5.6.2012 18:03

Podle http://json.parser.online.fr/ je ten JSON OK.

Nahoru Odpovědět
5.6.2012 18:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:5.6.2012 18:34

Toto jsem nasel, jenze to je pro HashMap

// libgdx handles the keys of JSON formatted HashMaps as Strings, but we
        // want it to be an integer instead (levelId)
        Map<String,Integer> highScores = json.readValue( "highScores", HashMap.class,
            Integer.class, jsonData );
        for( String levelIdAsString : highScores.keySet() ) {
            int levelId = Integer.valueOf( levelIdAsString );
            Integer highScore = highScores.get( levelIdAsString );
            this.highScores.put( levelId, highScore );
        }
 
Nahoru Odpovědět
5.6.2012 18:34
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Fugiczek
Fugiczek:5.6.2012 19:03

Zkusil jsem prepsat i metodu na cteni takhle:

@SuppressWarnings("unchecked")
        @Override
        public void read(Json json, OrderedMap<String, Object> jsonData) {
                List<Box>world=json.readValue("world", ArrayList.class, Box.class, jsonData);
                for(int i=0;i<world.size();i++){
                        this.world.add(world.get(i));
                }
        }

A vysledek: :D

Miner: Unable to parse existing world data file
com.badlogic.gdx.utils.SerializationException: Class cannot be created (missing no-arg constructor): com.fugiczek.miner.domains.Box
        at com.badlogic.gdx.utils.Json.newInstance(Json.java:839)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:719)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:762)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:680)
        at com.fugiczek.miner.domains.World.read(World.java:19)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:722)
        at com.badlogic.gdx.utils.Json.fromJson(Json.java:591)
        at com.fugiczek.miner.services.WorldManager.retrieveWorld(WorldManager.java:36)
        at com.fugiczek.miner.Miner.create(Miner.java:42)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:144)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)
Caused by: java.lang.InstantiationException: com.fugiczek.miner.domains.Box
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at com.badlogic.gdx.utils.Json.newInstance(Json.java:825)
        ... 10 more
Caused by: java.lang.NoSuchMethodException: com.fugiczek.miner.domains.Box.<init>()
        at java.lang.Class.getConstructor0(Unknown Source)
        ... 13 more
 
Nahoru Odpovědět
5.6.2012 19:03
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Fugiczek
Fugiczek:5.6.2012 19:17

Heuréka!! :D
Problém vyresen, ta metoda pri cteni dela novou instanci toho objektu, jenze ji vytvarela spatne protoze se pri vytvareni musi zadavat jakej je to typ kostky. Tak jsem zvlast pro cteni vytvoril prazdnej konstruktor a jede to.
Takze opet stacilo par hodin nervovani, nadavani a problem se vyresil 8-)

 
Nahoru Odpovědět
5.6.2012 19:17
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 49 zpráv z 49.