Probleme mit ner kleinen TileEngine



  • 5000 mal 5000 = 100 mal 100 Tiles - 10000 Tiles, pro Tile 512 KB macht 4,8GB

    Ich hab jetzt mal mit der Engine aus dem Buch von Christian Rousselle ein Sprite erstellt, mit einem Pixel als Textur: 512 KB hatte das Sprite



  • Dann wird den Mist weg und such Dir ne vernünftige Engine. Welche Information an diesem Pixel benötigt denn bitte schön ein halbes Megabyte???



  • 512 KB hatte das Sprite

    Wie hast Du das festgestellt?


  • Mod

    ich wuerde mal tippen: taskmanager 😃



  • ich vermute mal stark, dass er für jedes tile eine bitmap, png oder sonstwas neu läd, anstatt nen resource manager zu verwenden.

    edit: achso, du hast das gar nich ausprobiert, sondern nur aus diesem einem tile geschlussfolgert? nunja, wenn die engine nicht total stümperhaft ist, verwaltet die iwie, welche bilddateien schon geladen wurden und benutzt nur eine für alle sprites / tiles, die die selbe brauchen. das reduziert die tilemapgröße drastisch.



  • OK, jetzt hab ich das Sprite per "Hand" erstellt, ebenfalls 512 KB 😮

    Und es gibt einen Resource Manager 😉


  • Mod

    kannst du vielleicht hellihjb's frage beantworten?



  • Wenn es einen ResourceManager gibt was ist denn dann alles in deinem Sprite drin? Und vor allem bist du dir sicher das die 500kb nur der Sprite ist und nicht andere Programmteilen davon das eine doer andere Stück gehört?



  • Du hast sie schon erraten, rapso

    Ich lad euch morgen mal den Code hoch, dann könnt ihr nachschauen, was da schiefgeht, wenn ihr wollt.
    Hab den Code jetzt leider nicht, bin gerade nicht daheim



  • Also wenn er mit Task Manager richtig lag wieso haste dann nicht ein paar Hundert Sprites erstellt und dann mal ne Hochrechnung gemacht wieviel es wirklich ist?


  • Mod

    je nach api werden sprites garnicht im taskmanager angezeigt und selbst wenn, es... mir fehlen die worte.

    und 60L Diesel wiegen 1.2T



  • Hier bitte, 30 MB braucht die exe bei mir.
    Der Quellcode ist jetzt direkt der aus dem Buch, nur dass ich 50 Sprites erstellt habe 😃
    Ich hab die Dinger jetzt per "Hand" erstellt (CSprite* Sprite1, CSprite* Sprite2, ...), und ohne Liste, weil man so auch leichter die Texturen verändern kann.
    http://rapidshare.com/files/253727011/SpriteClass.rar.html



  • CSprite Sprite1;
    CSprite Sprite2;
    CSprite Sprite3;
    CSprite Sprite4;
    CSprite Sprite5;
    ...
    CSprite Sprite59;
    

    Wtf!? Sagt dir Array was?

    Sprite1.Create(Direct3D.GetDevice(), FILE_NAME);
    Sprite2.Create(Direct3D.GetDevice(), FILE_NAME);
    Sprite3.Create(Direct3D.GetDevice(), FILE_NAME);
    Sprite4.Create(Direct3D.GetDevice(), FILE_NAME);
    Sprite5.Create(Direct3D.GetDevice(), FILE_NAME);
    ...
    Sprite49.Create(Direct3D.GetDevice(), FILE_NAME);
    

    Oh man...

    Sprite1.Draw();
    Sprite2.Draw();
    Sprite3.Draw();
    Sprite4.Draw();
    Sprite5.Draw();
    ... 
    Sprite49.Draw();
    

    Und dann wundert dich noch, das etwas nciht funktioniert?



  • Bitte lies meinen oberen Beitrag, ich habe hier gesagt, dass ich die extra so reinkopiert hab - ohne Array oder Liste.
    Vor allem ist das nicht meine Engine, das ist die aus dem Buch.

    Hier, das ist mein MapManager, der die voreingestellten Maps "malt":

    for (it = MapSprites.begin(); it!=MapSprites.end(); it++)
        {
            (*it)->Draw();
        }
    

    Die haben dann auch einen ResourceManager 🙄



  • Arr0ws schrieb:

    Die haben dann auch einen ResourceManager 🙄

    Da sagt dein Quellcode aber was ganz anderes.

    Dein Sprite::Create ruft D3DXCreateTextureFromFileEx auf. Ich gehe mal davon aus das jeder Sprite den du irgendwo erstellst via Create initalisiert wird, heist also das du für jeden Sprite die Textur neu lädst.



  • Vor allem ist das nicht meine Engine, das ist die aus dem Buch.



  • Arr0ws schrieb:

    Vor allem ist das nicht meine Engine, das ist die aus dem Buch.

    und?



  • und?

    Dachte ich mir auch gerade!? 😕



  • Arr0ws schrieb:

    Vor allem ist das nicht meine Engine, das ist die aus dem Buch.

    Das Spielt garkeine Rolle, du arbeitest damit und beschwerst dich über Probleme, also gibts dafür auch ne Antwort, sonst hätteste dir den Thread ja auch sparen können.



  • Ich arbeite nicht damit, ich hab eine eigene geschrieben.
    Das Programm dient nur als "Fehlerfreies Beispiel", weil es der Autor des Buches so geschrieben hat (und es deshalb hoffentlich fehlerfrei ist).

    Im Endeffekt kann ich das Sprite einfach so erstellen, und es hat trotzdem 512 KB:

    LPD3DXSPRITE Sprite;
                D3DXCreateSprite(D3DDevice, &Sprite);
                Sprite->Begin(D3DXSPRITE_ALPHABLEND);
                D3DXVECTOR3 Mitte(32.0f, 32.0f, 0.0f);
                D3DXVECTOR3 Position(0.0f, 0.0f, 0.0f);
                Sprite->Draw(Textur, 
                               NULL, 
                               &Mitte, 
                               &Position, 
                               0xFFFFFFFF);
    
                Sprite->End();
    

Anmelden zum Antworten