játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5444
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2519

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] > 9 < [10] [15] [20] [25] [30] [35] [40] [45] [50] [55]
Kuz - Törzstag | 4455 hsz       Online status #144772   2010.12.08 09:21 GMT+1 óra  
Anno ez volt az a pillanat, amikor úgy döntöttem, hogy nem vagyok hajlandó az xnb-s változatát használni a textúráknak. Ha nem tömörítem a Pretender által javasolt módon, akkor marha nagy lesz, ha tömörítem, akkor meg rossz minőségű (nálam legalábbis szemmel jól látható minőségromlás volt). Ezért írtam saját textúra kezelést, amit még meg lehet fejelni azzal, hogy egy nagy fileba lennének betömörítve a képek, de arra már nem volt igény.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Pixi - Tag | 206 hsz       Online status #144751   2010.12.07 20:27 GMT+1 óra  
Aha értem...köszi Az egészben csak az a legrosszabb, ha azt is választom hogy NoChange, vagy pedig Color, ő nem hogy nem tömöríti, hanem még nagyobbá teszi a méretét, legalább hagyná meg az eredeti méretben no de nem gond most már...

   
Joga - Törzstag | 1791 hsz       Online status #144748   2010.12.07 20:16 GMT+1 óra  
A textúra oldalainak 4-gyel osztható számnak kell lennie, ha DXT-vel akarod tömöríteni
vagy kapcsold ki a tömörítést vagy méretezd át a képet.
(ಠ ›ಠ) Stewie!

   
Pixi - Tag | 206 hsz       Online status #144747   2010.12.07 20:13 GMT+1 óra  
Invalid texture. Face 0 is sized 370x42, but textures using DXT compressed formats must be multiples of four.

Na jah ezt most nem értem teljesen, mi is a gond?

   
Pretender - Törzstag | 2498 hsz       Online status #144745   2010.12.07 19:55 GMT+1 óra  
property window, textura kijelol, content processor ful, format legyen dxt compressed. Maris sokkal kisebb lesz a merete. Alapbol Color-ra van allitva, ami - ha jol tudom - tomoritesmentes, ezert lesz olyan nagy. (bar ez, ha jol tudom csak 2 hatvanya meretu textekkel mukodik, de mar a fene se tudja)

   
Pixi - Tag | 206 hsz       Online status #144743   2010.12.07 19:48 GMT+1 óra  
Egy gyors kérdés: az normális, hogy akármelyik képformátumot használom, amint az futtatható formában le lesz forditva és átalakítva xnb-be, a mérete jóval nagyobb is lesz? Ugye nem mindenhol kell nekem a png...de ha jpg képet is használok az addig ok amíg nincs átfordítva, vagy ha pl. be van zippelve, csak akk kisebb a mérete...mitől van ez? nem nagyon értem...lehet ez ellen tenni?

Pl. 320x42 egy képem az eredeti png kiterjesztésben 12 kb...az átfordított xnb kiterjesztésben pedig ugyanez 64 kb...van ez ellen valami megoldás?

   
Pretender - Törzstag | 2498 hsz       Online status #144691   2010.12.06 12:41 GMT+1 óra  
Nem is azzal van a baj, hogy tobb helyen szerepel pl. hasonlo vertex shader, hanem, hogy a begin,beginpass,endpass,end sok mindent csinal (ha jol gondolom), amire nem biztos, hogy szukseg van. Meg az is lehet, hogy a renderstatekkel is buheral valamit, de az azert eros lenne... (avagy nem tudom elkepzelni, hogy mitol is lassu) c++bol pelda:
Kód:
m_Device->SetVertexShader(...);
m_Device->SetPixelShader(...);

majd eleg a constant table-nek ertekeket allitani, es ennyi volt
Kód:
m_VS->SetValue("param", ¶m, size);

   
Matzi - Szerkesztő | 2519 hsz       Online status #144688   2010.12.06 11:06 GMT+1 óra  
Ha sok hasonló shadert használsz, akkor akár egy fájlba is tehetnéd, és technikánkra kell csak bontani.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Pretender - Törzstag | 2498 hsz       Online status #144631   2010.12.03 20:40 GMT+1 óra  
Azon gondolkoztam, hogy meg lehet-e kerulni az effekt keretrendszert valahogy, es u.ugy vsh,psh fajlokat, device->SetVertexShader(...)-t es SetPixelShader(...)-t hasznalni. A kirajzolast jelenleg kotelezoen begin, beginpass, rajzolas, endpass, end koze kell rakni, aminel gondolom jopar (folosleges) muveletet vegrehajt. Ellenben ha kezzel csinalna az ember, akkor egyreszt nem kellene a hasonlo fx fajlokba u.azt a vs-t becopyzni, masreszt lehet, hogy gyorsabb is lenne

   
Pretender - Törzstag | 2498 hsz       Online status #144485   2010.11.29 13:14 GMT+1 óra  
Pixi - Tag | 206 hsz       Online status #144484   2010.11.29 13:10 GMT+1 óra  
Pretender: Ez még csak próba jellegű kód, nem player-ből kéne sok. Hanem képzelj el egy platform játékot, ahol van neked egy pályán akár több száz aranyad, több száz téglád, vagy földrész külön-külön, több ugyanolyan ellenség(igen ezt most a márióból szedem ki ). És nálam ott kezdődött a probléma hogy ki is tudnám ezeket rajzolni többször, csak ha tegyük fel egyiknek megváltozik a textúra atlasza, akkor az az összes többinél is megváltozna ami nem jó. a Player csak egy próba volt, azt akartam volna vele tesztelni, ha a kör megérinti csak az egyiket, akkor csak annak változik meg a textúrája, és nem úgy mint ahogy nekem is sikerült hogy az összes többié is

   
mark576 - Tag | 256 hsz       Online status #144481   2010.11.29 12:37 GMT+1 óra  
Szerintem a player, vagy valamelyik őse nyugodtan tartalmazhat egy referenciát a textúrára abból még semmi tervezési zűr nincs. A felszabadítást még ekkor is kezelheti külön a manager, de hogy minden egyes draw-ban onnan kell lekéregetni az szerintem fölösleges. De ezek már ilyen finomabb dolgok végül is stílus kérdése.
   
Asylum - Törzstag | 5444 hsz       Online status #144479   2010.11.29 11:46 GMT+1 óra  
Szerintem már irták lentebb, hogy a programozást nem az XNA-val kell kezdeni. Nem kötekedésből mondom, de hatalmas átgondolatlanságok vannak a bemásolt kódodban (és ezért valószínűleg a javasolt megoldásokat sem fogod érteni).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Kuz - Törzstag | 4455 hsz       Online status #144477   2010.11.29 10:43 GMT+1 óra  
Nem túlságosan néztem át a lenti kódokat, de látok benne egy dolgot, amit én nem így oldottam meg a játékomban. Ez pedig a textúra kezelése. Az én felfogásom, hogy nem a Player osztály dolga felszabadítani a textúra erőforrást, így nem is kell, hogy tartalmazza a textúrát. Helyette én külön statikus textúra managerbe töltöm be a textúrákat, amiben van egy két dimenziós lista, ahol az adott listaelem első eleme a textúra, második eleme pedig, hogy hányan használják. Amint valami lenullázódik, lehet törölni. Avagy három dimenzióssá alakítani a listát, és harmadik elemként egy statisztikához tartozó értéket felvenni, hogy milyen sűrűn kell ki/betölteni, és azt is figyelembe lehet venni az erőforrás kezelésnél. Így majd az ilyen osztályokban, mint a Player, csak indexeket tárolok, amik a fenti lista egy adott elemére mutatnak. Azt mondjuk nem állítom, hogy ez így teljesen implementálva is van nálam. Azt hiszem az lentebb letölthető op.-coop. kódban még két egy dimenziós lista van, és nem egy két dimenziós. Továbbá a resource kezelés sem biztos, hogy jól meg van valósítva a kódban, de a lényeg azt hiszem megvan. Player betöltéskor ki kell szedni a listából a 'textúra neve'-edik elemet (a manager végzi el azt, hogy ha még nincs betöltve ilyen textúra, akkor először töltse be), így amikor új Playert csinálsz, mondhatod azt, hogy blabla = new Player(..., textureIndex, ...);. Kirajzoláskor meg azt mondod, hogy Draw(..., textureManager.GetTexture(textureIndex), ...);. Persze ez csak ötlet.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Pretender - Törzstag | 2498 hsz       Online status #144474   2010.11.29 06:47 GMT+1 óra  
1: kirajzolaskor miert adsz at poziciot, ha mar van a jatekosnak is sajat pozicioja?
2: miert kellene, h static legyen az a lista?
3: for ciklus...
Kód:
for (int i = 0; i < players.Count; i++)
{
    player[i].Update();
}

vagy hasznalsz game componentet, ahogy lentebb mark irta...
4: az utkozest nem a playeren belul kellene megoldani. vagy legalabbis nem igy. Regen en is static-oltam, nem tul jo...
vagy legalabb pl.
Kód:
void Update()
{
    //jatekos mozgatasa
}
void Collision(Rectangle other)
{
    //utkozesvizsgalat masik negyzettel
    //tetszes szerint jatekos visszafele mozgatasa, hogy ne utkozzon, vagy ilyesmi
}

class Game
{
    Player player;

    void Update()
    {
        tobbidolog.Update();

        player.Update();
        for (int i = 0;i < tobbidolog.Count; i++)
            player.Collision(tobbidolog[i].Rectangle);
    }
}

Nem bantasbol mondom, de tudod, a gond a tervezes es alapveto programozasi ismeretek hianya. Vegigszenvedheted magad valami mukodo verzioig, vagy elkezdhetsz tanulni... Akar olvashatod azt a rohadas xna tutorokat is, amiket irtam, mar ott is jobban meg van tervezve, mint most nalad.

Amugy lehet egy olyan kerdesem, hogy miert van szukseged tobb playerre?

Ezt a hozzászólást Pretender módosította (2010.11.29 06:58 GMT+1 óra, ---)

   
Pixi - Tag | 206 hsz       Online status #144472   2010.11.29 03:58 GMT+1 óra  
Ok csináltam külön osztályt a player számára:

Kód:
    public class player1
    {
        public static Texture2D playerKep;
        public static Vector2 pozicio;
        public static Rectangle playernegyzet;
        public static Rectangle playertexturanegyzet;
        public static bool utkozes = false;

        public player1(Texture2D player)
        {
            playerKep = player;
        }

        public void Update()
        {
            utkozes = false;

            playernegyzet = new Rectangle((int)pozicio.X, (int)pozicio.Y, playerKep.Width, playerKep.Height);
            playertexturanegyzet = new Rectangle(0, 0, playerKep.Width, playerKep.Height);

            if (playernegyzet.Intersects(Game1.labdanegyzet))
                utkozes = true;
            if (utkozes == true)
            {
                playertexturanegyzet = new Rectangle(10, 10, playerKep.Width, playerKep.Height);
                Game1.kockanegyzet = new Rectangle(0, 0, 800, 600);
            }
        }

        public void Rajzolas(SpriteBatch ceruza, Vector2 pozicio)
        {
            ceruza.Draw(playerKep, pozicio, playertexturanegyzet, Color.White);
        }
    }


Viszont még mindig nem világos, mit és hogyan kell megadnom a Game1-ben hogy külön kezelje őket. Idáig ok hogy:

static List<player1> players = new List<player1>();

De ezt akkor hogyan is tudom külön pontokban kirajzolni, úgy hogy külön is kezelje?

players.Add(new player1(this, new Vector2(100, 100), "player"); ??? Igy nem éppen jó

a load, update, és draw -hoz mit kéne írnom? Jó egyáltalán ez a player1 osztály?

   
Pretender - Törzstag | 2498 hsz       Online status #144434   2010.11.27 10:17 GMT+1 óra  
Nem akkora baj, ha ugyan azt a texturat akarja betolteni, mert a mar betoltottre kap egy pointert/refit.

   
mark576 - Tag | 256 hsz       Online status #144433   2010.11.27 09:44 GMT+1 óra  
pixi: Hát igen, ha már full oop nyelvben dolgozok, illik osztályokban, objektumokban gondolkodni. Ez az emberi gondolkodáshoz is közel áll csak magadnak teszel jót ha így csinálod. A textúrát a content kezelővel töltöd be egyszer, de más motorban se 100* töltünk be egy textúrát. Szóval akkor az osztálynak tartalmaznia kell a változtatáshoz szükséges adatokat is, offset stb, ami minden player objektumnál más lesz. A list jó, bár törlésnél lesznek vele zűrök, ugyanis iteráció közben nem fog engedni törölni csak ha trükközöl. Ezért volna jó, ha alapból DrawableGameComponent lenne a player osztály és az xna listájába raknád.

Kód:
class Player : DrawableGameComponent
{ ... }

using System.Linq;

Game1 : public Game
{
    List<Player> players = new List<Player>();
    ....
    players.Add(new Player(this, Vector2D(10, 20), "playerTex"));
    Components.Add(players.Last());
}


Így is szokták rétegelt programokban. Ilyenkor a players list csak egy segédlista, amivel kezelni lehet a referenciákat, a tényleges frissítést az xna oldja meg a GameComponentCollection-el.
   
Pretender - Törzstag | 2498 hsz       Online status #144422   2010.11.26 22:19 GMT+1 óra  
ja, amugy megjegyzes:
List<T> eseten, ha T egy struktura, akkor az elemeit igy nem modosithatod:
Kód:
lista[i].adattag = valami;

csak ugy, hogy
Kód:
T t = lista[i];
t.adattag = valami;
lista[i] = t;

osztallyal nyilvan nincs ilyen gond. Tombbel szinten mukodik a struktura dolog.

   
Pixi - Tag | 206 hsz       Online status #144418   2010.11.26 21:17 GMT+1 óra  
"Meg kell tervezni, hogy most akkor van egy Player osztály, aminek van egy textúra atlasza, meg rectangle-ja, és amikor mozog, akkor ez, meg ez fog történni stb. "

Vagyis ezzel azt akarod mondani, ha külön osztályba pakolom a player-t és a hozzá tartozó dolgait, akkor aztán könnyebb lesz példányosítani? Bocs ha nem így hívják, itt arra gondolok, hogy többször is létrehozni/kirajzolni ugyanazon a pályán vagy ilyesmi...persze itt úgy gondolok rá, hogy 1x adom meg a feltételeket, és akkor ne az legyen, hogyha pl. kinyírom az egyik példányt, akkor eltűnjön az összes, valamint átvegye az ő textúráját stb...valójában az én kódom is ezt kéne...de csak kéne hogy ábrázolja.

Nem tudom ez a List mennyire alkalmas erre, mindenesetre nem szeretnék tőle megválni, mert már félig meddig működik, amúgy Pretender által linkelt legelső kódban is így oldották meg. Ezt azért nem magamtól írtam meg 0-ról, mert nem tudtam hogyan kell. Most már csak annyi kéne, hogy a textúra atlasz működjön, na meg hogy változókat is hozzá tudjak csatolni/példányosítani...már ha lehet ilyent...és akkor nem kell 100 külön int a 100 külön elemre, hanem csak 1x hoznám létre őket, ahogyan a Vector2-t is...

Ezt a hozzászólást Pixi módosította (2010.11.26 21:25 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #144404   2010.11.26 16:37 GMT+1 óra  
Meg jo, h irtam primitiv xna tutort (6os lecke utan mar mindazt tudja, amit most Te akarsz kb.)

   
mark576 - Tag | 256 hsz       Online status #144403   2010.11.26 15:01 GMT+1 óra  
pixi: Annyira kusza a kód, hogy én se értem. Ha lasabban haladnál és előre megterveznéd, hogy mi legyen, akkor nem keverednél te se bele a saját programodba. Ez sima tervezési hiba, vagyis nálad tervezés hiány hiba. Csak dobálod a kódot össze-vissza.

Meg kell tervezni, hogy most akkor van egy Player osztály, aminek van egy textúra atlasza, meg rectangle-ja, és amikor mozog, akkor ez, meg ez fog történni stb.
   
Pixi - Tag | 206 hsz       Online status #144402   2010.11.26 11:24 GMT+1 óra  
Konkrétan : többször is be van töltve a player...az ütközés is működik akármelyikre húzom a kört...és azt kéne csinálja, hogy ütközéskor a textúra atlaszt kissé megváltoztassa...10, 10 pixellel eltolja, ezt csak próbaként adtam meg így...de nem úgy, hogy akkor az összes player-ét (mert hogy az már sikerült), hanem csak az adott példányét...lehet hogy nem is a source rectangle-t kellett volna List-be helyeznem?

   
Pretender - Törzstag | 2498 hsz       Online status #144401   2010.11.26 05:54 GMT+1 óra  
Tovabbra is csak azt tudom mondani, h meg kellene tanulni programozni, meg egy kicsit igy... felepiteni, kitalalni a dolgokat.

Ezt ne bantasnak vedd, de igy kesobb se fogsz semmire se jutni. Persze jo az, ha az ember probalkozik, de kozben olvasgathatnal egy konyvet. Ha pl. xna-t akarsz tolni, akkor c# konyvet vegignyomod, abbol megtanulod az alap dolgokat, aztan tanulhatsz egy kis tervezest is, stb. Emellett xna-s tutor rengeteg van, nekem is illene irnom tovabb mar. A 6-os felig kesz, csak be kellene fejezni, aztan menne a 3d.

szerk.:
en konkretan igy reggel nem tudom, h mit akarsz a koddal

   
Pixi - Tag | 206 hsz       Online status #144400   2010.11.26 04:06 GMT+1 óra  
Tudom amikor legelőször ide írtam, akkor már feltettem ezt a kérdést az elemek többszöri betöltésével kapcs. Azóta sem sikerül teljesen működésre bírni. List szerűen hoztam létre a vektorokat. Többször is sikerült betölteni, valamint az ütközés is működik, csak a hozzájuk tartozó textúra atlasz már nem:

Kód:
        Texture2D player, labda, kocka;

        List<Vector2> playerpontok = new List<Vector2>();
        Vector2 labdapont;

        Rectangle playernegyzet;
        List<Rectangle> playertexturanegyzet = new List<Rectangle>();
        Rectangle labdanegyzet;
        Rectangle kockanegyzet;
        bool utkozes = false, atlasz = false;

        int i = 0, i2 = 0;

            playertexturanegyzet.Add(new Rectangle(0, 0, player.Width, player.Height));
            playerpontok.Add(new Vector2(100, 100));
            playerpontok.Add(new Vector2(150, 150));
            ...

            player = Content.Load<Texture2D>("player");
            labda = Content.Load<Texture2D>("labda");
            kocka = Content.Load<Texture2D>("kocka");

        protected override void Update(GameTime gameTime)
        {
            KeyboardState ks = Keyboard.GetState();
            MouseState ms = Mouse.GetState();

            labdapont.X = ms.X;
            labdapont.Y = ms.Y;

            utkozes = false;

            for (i = 0; i < playerpontok.Count; i++)
            {
                i2 = i;

                labdanegyzet = new Rectangle((int)labdapont.X, (int)labdapont.Y, labda.Width, labda.Height);
                playerpontok[i] = new Vector2(playerpontok[i].X, playerpontok[i].Y);
                playernegyzet = new Rectangle((int)playerpontok[i].X, (int)playerpontok[i].Y, player.Width, player.Height);

                if (ks.IsKeyDown(Keys.Right))
                    playerpontok[i] = new Vector2(playerpontok[i].X + playersebesseg, playerpontok[i].Y);

                if (playerpontok[i].X > 700)
                {
                    playerpontok.Add(new Vector2(playerpontok[i].X - 600, playerpontok[i].Y));
                    playerpontok.RemoveAt(i);
                    i--;
                }

                if (labdanegyzet.Intersects(playernegyzet))
                    utkozes = true;

                if (utkozes == true)
                {
                    kockanegyzet = new Rectangle(0, 0, 800, 600);
                }
                else
                {
                    kockanegyzet = new Rectangle(0, 0, 0, 0);
                }
            }

            i2 = i;

            atlasz = false;

            for (i2 = i; i2 < playertexturanegyzet.Count; i2++)
            {
                i2 = i;

                playertexturanegyzet[i2] = new Rectangle(0, 0, player.Width, player.Height);

                if (labdanegyzet.Intersects(playernegyzet))
                    atlasz = true;

                if (atlasz == true)
                    playertexturanegyzet[i2] = new Rectangle(10, 10, player.Width, player.Height);
                else
                    playertexturanegyzet[i2] = new Rectangle(0, 0, player.Width, player.Height);
            }

                base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            spriteBatch.Draw(kocka, kockanegyzet, Color.White);

            foreach (Vector2 playerpont in playerpontok)
                foreach (Rectangle playertxt in playertexturanegyzet)
                spriteBatch.Draw(player, playerpont, playertxt, Color.White);

            spriteBatch.Draw(labda, labdapont, Color.White);

            spriteBatch.End();

            base.Draw(gameTime);
        }


Hibát nem jelez, mégsem működik. Annyit tudok, hogyha már inicializáláskor nem az alap textúra nagyságot töltöm be, akkor ott működik, de ha később akarom változtatni őket, akk. már nem.

http://data.hu/get/3223198/ListTest4.zip

   
Pixi - Tag | 206 hsz       Online status #144123   2010.11.20 22:55 GMT+1 óra  
Nah úgy néz ki sikerült megoldanom, habár csak 3 sorral kellett bővítenem a kódot:

Kód:
using System.IO;

        public static StreamReader sr;
        public static StreamWriter sw;

        public static int cel_valtozo = 0;
        public static string a;

        public static void OlvasasTest()
        {
            KeyboardState ks = Keyboard.GetState();

            if (ks.IsKeyDown(Keys.R))
            {
                sr = new StreamReader("Content\\forras.txt");
                a = sr.ReadLine();
                bool parsed = Int32.TryParse(a, out cel_valtozo);
            }
        }

        public static void IrasTest()
        {
            KeyboardState ks = Keyboard.GetState();

            if (ks.IsKeyDown(Keys.W))
            {
                sw = new StreamWriter("Content\\cel.txt");
                sw.Write(cel_valtozo);
                sw.Close();
            }
        }

        protected override void Update(GameTime gameTime)
        {
            OlvasasTest();
            IrasTest();

            base.Update(gameTime);
        }


Stringet voltam kénytelen használni, majd ennek szám értékét átalakítani és átadni a változónak. Na meg a ReadLine() a sima Read helyett. Egyenlőre ez is megteszi, annyira nem komplex játékról lenne szó, inkább sima Mario stílusút szeretnék megpróbálni, ahol csak a level számát kell tárolnom. Tehát semmi Life, Score vagy egyéb...Még 1x kösz mindenkinek a segítséget, kódokat

   
mark576 - Tag | 256 hsz       Online status #144058   2010.11.20 11:02 GMT+1 óra  
Játékállás manageléséhez a memento pattern-t érdemes használni.
   
Pixi - Tag | 206 hsz       Online status #144032   2010.11.19 20:09 GMT+1 óra  
"...(mivel eleve nem értem, hogy mi a célja ennek a kódnak) :"

Ennek így semmi , csak teszt jellegű, olvasást akartam vele tesztelni, valamint írást, mint írtam olvasásnál még nem jól működik. Ezt amúgy egy egyszerűbb játékra tervezném, amiben mondjuk van 5 level, és minden túljutott level után mentené a változó értékét file-ba. Azután játék indításnál meg kiolvasná ugyan onnét az utóbbi értéket, így aszerint töltené be a mappot, elemeket, változók értékeit, pozíciók, stb...köszi a kódokat, átbogarászom

   
Pretender - Törzstag | 2498 hsz       Online status #144007   2010.11.19 12:36 GMT+1 óra  
Emellett tovabbra is xml serializer, deserializer, kesobb, ha mar van options, akkor lehet binary writer es reader is

   
mark576 - Tag | 256 hsz       Online status #144004   2010.11.19 10:07 GMT+1 óra  
pixi ez pedig eléggé tök egyszerű:
Kód:
using System.Collections;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace Program
{
    [Serializable]
    public class ConfigFile
    {
        public ConfigFile() { }

        public string Test { get; set; }
        public int Number { get; set; }

        public override string ToString()
        {
            return String.Format("Test: {0}, Number: {1}", Test, Number);
        }
    }

    static class Program
    {
        static void Main()
        {
            //objektumot gyártok, aztán kiírom XML file-ba
            var configFileXML = new ConfigFile { Number = 1912, Test = "test" };
            using (var stream = new FileStream("config.xml", FileMode.Create))
                new XmlSerializer(typeof(ConfigFile)).Serialize(stream, configFileXML);

            //beolvasom az objektumot XML-ből és kiírom a képernyőre
            ConfigFile config;
            using (var stream = new FileStream("config.xml", FileMode.Open))
                config = new XmlSerializer(typeof(ConfigFile)).Deserialize(stream) as ConfigFile;
            Console.WriteLine(config.ToString());

            Console.Read();
        }
    }
}
   
Kuz - Törzstag | 4455 hsz       Online status #144003   2010.11.19 10:04 GMT+1 óra  
Annyiszor szembesültem már azzal, hogy óvakodni kell a teszt kódolástól, inkább meg kell próbálni a ténylegesen kívánt dolgot leprogramozni, mert utána javíthatsz egy tök rossz megoldást.
Javaslatom (mivel eleve nem értem, hogy mi a célja ennek a kódnak) :
1. Töréspontok beállítása a static metódusok IsKeyDown törzseibe. Ne elé, hiszen neked csak akkor kell oda belépni, ha W-t, vagy R-et nyomtál.
2. "cel_valtozo = sr.Read(); " előtt és után a cel_valtozo vizsgálata, hogy beazonosítsd mikor jó, és mikor nem jó a változó értéke, ezzel kvázi meghatározod, hogy hol LEHET a hiba. Beolvasás előtt esetleg total commanderben ránézhetsz a filera, hogy olvasasá/írás előtt/után hogy néz ki a file, mert lehet nem is azt kapod, amit gondolsz.
3. Olvasás/írás után file lezárása, írás esetén azt hiszem kell a Flush is, de ennek alaposabban utána kell nézni, fejből én sem vagyok benne biztos.
4. Az alábbi link alapos tanulmányozása, nehogy meglepetés érjen.

Konkrét megoldást nem szeretnék adni, szenvedj egy kicsit, abból mindig többet lehet tanulni. Ha mégsem megy (és nem 5 perc után!), akkor további segítséget is adunk.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Pixi - Tag | 206 hsz       Online status #143998   2010.11.18 23:48 GMT+1 óra  
Pretender utána néztem az általad írt módszernek, de sajnos nem találtam sehol számomra érthető megoldást. Viszont találtam egy másik módot, ami már majdnem tökéletesen működik, annyi hogy nem jól olvassa ki az értéket. Szóval a StreamWriter és a StreamReader -ről lenne szó. De hogy ne csak elméletben beszéljek íme az eddigi kód. Az írás működik, de az olvasás nem éppen jó:

Kód:
using System.IO;

        public static StreamReader sr;
        public static StreamWriter sw;

        public static int cel_valtozo = 0;

        public static void OlvasasTest()
        {
            KeyboardState ks = Keyboard.GetState();

            if (ks.IsKeyDown(Keys.R))
            {
                sr = new StreamReader("Content\\forras.txt");
                //sr.Read();
                cel_valtozo = sr.Read(); // -> ???
                //sr.Close();
            }
        }

        public static void IrasTest()
        {
            KeyboardState ks = Keyboard.GetState();

            if (ks.IsKeyDown(Keys.W))
            {
                sw = new StreamWriter("Content\\cel.txt");
                sw.Write(cel_valtozo);
                sw.Close();
            }
        }

        protected override void Update(GameTime gameTime)
        {
            OlvasasTest();
            IrasTest();

            base.Update(gameTime);
        }


A forras.txt -t azt én hoztam létre kézzel. Ha csak a W-t nyomom, vagyis csak üresben írok, akkor helyes értéket ír a cel.txt -be vagyis alap. 0-t mert annyi a változó értéke. De ha a forras.txt -ből kilvasott 1 -et akarom aztán írni (tehát először R aztán W), akkor 49 -et ír a cél.txt -be Számomra ez érthetetlen. Akkor pl. ha 5-t írok be és azt olvastatom ki, akkor meg 53-at ír be. Mit szúrtam el? Át akarom adni a változónak a kiolvasott értéket, ami meg is történik, de hibásan. Az meg ok hogy ő minden írásnál újraírja a txt tartalmát, pont ez a cél is.

http://data.hu/get/3200207/File-ba_iras2.zip

   
Kuz - Törzstag | 4455 hsz       Online status #143851   2010.11.16 16:56 GMT+1 óra  
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Pretender - Törzstag | 2498 hsz       Online status #143831   2010.11.16 14:54 GMT+1 óra  
De, kell premium membership, azonban, ha valakinek van nemzetkozi diakja, akkor tud egy olyat csinalni, hogy egy eves ingyenes trial membership, majd megkeresem a linket. Kiprobaltuk, mukodik

szerk.:
Volila: https://www.dreamspark.com/default.aspx
"Student membership: Are you a student? Get Microsoft professional tools at no charge."

Ezt a hozzászólást Pretender módosította (2010.11.16 14:59 GMT+1 óra, ---)

   
Kuz - Törzstag | 4455 hsz       Online status #143830   2010.11.16 14:51 GMT+1 óra  
A teszteléshez nem kell véletlenül az xna-s licence? csak úgy simán összekötöd, fordítasz, másolsz, játszol?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
Pretender - Törzstag | 2498 hsz       Online status #143826   2010.11.16 12:39 GMT+1 óra  
egy sima xbox 360 eleg, rakotod. Nem art, ha nem flashelt, mert bannolnak liverol, ha kiderul

   
barack1 - Tag | 95 hsz       Online status #143815   2010.11.16 07:09 GMT+1 óra  
Sziasztok,

Van egy kérdésem. Szeretnék Xbox360 -ra fejleszteni XNA -val. Jelenleg nincs Xbox360 -am. Az XNA kiírta, hogy hozzak létre egy kapcsolatot egy Xbox360 -nal ha le akarok fordítani egy programot.

Az a kérdésem, hogy egy bármilyen mezei Xbox360 megfelel, vagy a fejlesztéshez valami speciális Xbox360 kell ?
   
Pretender - Törzstag | 2498 hsz       Online status #143814   2010.11.16 05:53 GMT+1 óra  
Xml-be ments, ott van a serializer meg a deserializer. vagy lehet binary reader meg writer is, de azt xna alatt sose hasznaltam

   
Pixi - Tag | 206 hsz       Online status #143813   2010.11.16 01:09 GMT+1 óra  
Üdw mindenkinek
Egy újabb és remélhetőleg egyszerű kérdésem lenne. Szóval fájlba szeretnék írni/olvasni egy változó értéket, ami most kezdő lépésben legyen csak szám érték. Pontosabban úgy gondoltam erre a célra egy txt file-t használnék (de amúgy tök lényegtelen milyen kiterjesztés csak működjön). Pl. van egy int level = 1 változóm és egy level.txt nevű file, abban van egy sor, ami egy szám alapesetben legyen pl. 0. Ha lenyomom a W billentyűt pl. , akkor kitörli a txt.-ben levő 0-t és átírja a változó aktuális értékére vagyis 1-re majd elmenti ezt...aztán tegyük fel a level változó értéke megváltozik., de csak a programban nem a txt-ben. Az R billentyű lenyomásával pedig fogja és kiolvassa a level.txt tartalmát vagyis az 1-et és átadja a level változónak vagyis akkor 1 lesz. Gondolom értitek mire gondolok, ilyesmit képzeltem el játék állásának mentésére/folytatására.

   
Kuz - Törzstag | 4455 hsz       Online status #143764   2010.11.15 15:22 GMT+1 óra  
Azért a 'sokat' kicsit erős megfogalmazás. Ami esetleg tényleg érdekes lehet, az a részleges bloomolás, illetve a gui gombokra való metódus kötés (na ez szépen hangzott ). A kód eléggé teszt jellegű, ez főleg a warfare-en látszik. A cooperation már valamivel kiforrottabb kódolást mutat, de abban is elég sok a teszt-jellegű kód (pl az ellenfelek hozzáadása tipikusan ilyen gyors tesztkód, némi buggal fűszerezve ). Továbbá, aki szereti a content pipelinet, annak ez nem fog tetszeni, mert direkt arra mentem rá, hogy a képfileok a lehető legegyszerűbben szerkeszthetőek legyenek (mert mi van, ha a játék tetszik egy textúrakészítőnek, de szeretné a saját képeit használni), ehhez pedig ugye file.load megoldás kellett, ami magával vonzza a saját texturemanager osztály létrehozását. A gui kezelő szintén egy kis egyszerű megoldás, van benne még talán némi bug, de 1-2 apró dolgot legalább már tud. A warfare-ben még valami kezdetleges jukebox is van. Szóval ilyenek, igazából semmi olyan extra, amit ne lehetne kitalálni, kiguglizni néhány perc/óra alatt. A warfare player kezelő része amúgy jellegzetesen sok redundanciát tartalmaz, azt speciel vicces olvasni, mert eléggé indiai-style a kialakítása.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
mark576 - Tag | 256 hsz       Online status #143760   2010.11.15 14:54 GMT+1 óra  
Közben lemaradtam, live már lassan egy hete van. Lassan, de biztosan hozzáadódnak az új régiók a hub-hoz. Barátnő, zene? Áh, csak a fejlesztés, semmi más.
   
Pretender - Törzstag | 2498 hsz       Online status #143751   2010.11.15 13:32 GMT+1 óra  
Kuz, rendes toled a felajanlas ha feltoltened, szerintem sokan tudnanak tanulni belole

   
Kuz - Törzstag | 4455 hsz       Online status #143748   2010.11.15 12:43 GMT+1 óra  
Nekem meg kezdődik - remélhetőleg - újra a barátnőzés és a zenélés, szóval a hobbi fejlesztés, mint olyan, leredukálódik kb 0-ra nálam. Meg már amúgy is túlvagyok a c++ első tutorialjan.
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
mark576 - Tag | 256 hsz       Online status #143747   2010.11.15 11:47 GMT+1 óra  
Kuz, pont most hagyod abba, amikor a héten már lesz live? Most kezdődik csak igazán az xna.
   
Bukta - Tag | 308 hsz       Online status #143743   2010.11.15 10:33 GMT+1 óra  
mark576: Így már más, jó ötlet volt erre nem is gondoltam pedig kellett volna
Egy null miatt nem volt jó. thx
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
Kuz - Törzstag | 4455 hsz       Online status #143732   2010.11.15 09:37 GMT+1 óra  
Mivel egyre kevesebb időm van fejlesztéssel foglalkozni, meg amúgy is leálltam az xna-ról, érdeklődöm kell-e valakinek a két projectem kódja, az
Operation : Cooperation, és/vagy a
Galactic Warfare?
Az operation teljes mértékben futtatható, kvázi a legutolsó állapotát tükrözi. A galacticban sok utólagos változás volt, az most ilyen futtatható, de a sok kommentezés miatt nem annyira teszt képes állapotban van (igazán már én sem emlékszem rá, hogy mit kell belőle visszakommentezni, hogy minden megjelenjen). Akár befejezésre, akár 1-2 ötlet felhasználására is jó lehet valakinek. Nem valami übermajer a kód, de talán van benne néhány hasznos fogás (pl a galacticban van részleges bloom, ami csak bizonyos ojjekteket bloomol, ez meg annyira nem triviális dolog). Akinek kell, az jelezze, aztán felpakolom contentestől valahova (tippeket várok hova érdemes rakni). VS 2008 prof alatt van mindkettő, és talán a warfare is 3.1-es xna-t használ (a copoeration biztosan).
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
mark576 - Tag | 256 hsz       Online status #143709   2010.11.14 23:30 GMT+1 óra  
Idézet
Bukta :
hy
Aki ismeri a "TargetInvocationException: A meghívott objektum kivételt váltott ki." üzenetet az pls írjon, mert már x ideje szivat engem ez a kivétel és még a google se dob normálisat. Jah és erre a sorra dobja:
drawDatas[a] = (DrawData)bFormatter.Deserialize(stream);


Ebből akár még a holle anyó hibája is lehet. Ha a VS-ben nem megy a watcholás, akkor próbáld meg így:
Kód:
try
{
    drawDatas[a] = (DrawData)bFormatter.Deserialize(stream);
}
catch(TargetInvocationException ex)
{
    throw ex.InnerException;
}

Na, erre mit kaptál?
   
Bukta - Tag | 308 hsz       Online status #143704   2010.11.14 22:41 GMT+1 óra  
hy
Aki ismeri a "TargetInvocationException: A meghívott objektum kivételt váltott ki." üzenetet az pls írjon, mert már x ideje szivat engem ez a kivétel és még a google se dob normálisat. Jah és erre a sorra dobja:
drawDatas[a] = (DrawData)bFormatter.Deserialize(stream);
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
Pretender - Törzstag | 2498 hsz       Online status #143430   2010.11.09 14:22 GMT+1 óra  
Akkor meg leirja, hogy mit kell csinalni Amugy nem tudom, en xna alatt nem olvasgattam kozvetlen fajlbol, max. xml-t

   
Bukta - Tag | 308 hsz       Online status #143428   2010.11.09 14:17 GMT+1 óra  
Hát nem tom, de ez nem content-es writer hanem a BinaryWriter-ből szárnazó PacketWriter, meg a reader társa. Amugy lehet hogy a LocalNetworkGamer.ReceiveData írja bele a readerbe a dolgokat, de ezt is probáltam csak a NetworkSession.Create is kidobott valami -InvalidOperationEx: The Gamer Services functionality must be initialized before you call this method. The easiest way to do that is to add a GamerServicesComponent to the Game.Components collection in the constructor of your Game class.- kivételt. Ez a "láncrekció" a kivételekből lesokkolt .
ArgumenException: A megadott DependencyObject nem ehhez a Freezable elemhez tartozó környezet. Paraméter neve: context
:oO Mi a???
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] > 9 < [10] [15] [20] [25] [30] [35] [40] [45] [50] [55]