GDI+ tiles

  • Hey

    Ich mache gerade ein RPG und benutze tiles auf einem Gitter (16x16 grid, 256 tiles je 50px Höhe/Breite).

    Jetzt weiß ich nicht welche der folgenden Möglichkeiten die beste bezüglich der Performance ist:

    1.1) Ich zeichne auf jedes Feld ein bestimmtes tile. Vorteil: Man kann dynamisch die Levels gestalten und im Nachhinein schnell und einfach noch etwas ändern. Nachteil: Sehr Performance-lastig (256 Mal _GDIPlus_GraphicsDrawImage(), dazu kommen dann ja noch die anderen Sachen wie ein UI, die ich zeichnen muss.) Habe ich schon ausprobiert und meine FPS werden extrem gedrückt (auf weit unter 30).

    1.2) siehe 1.1, nur dieses Mal habe ich alle tiles in einem tileset, sprich alle einzelnen Bilder auf einem einzigen großen Bild und benutze dann _GDIPlus_GraphicsDrawImageRectRect(). Habe ich nur ansatzweise und nicht ausgiebeig getestet, sollte aber die Performance nicht weniger drücken als in 1.1, von daher...

    2.) Ich zeichne die verschiedenen Level-Abschnitte, mache jeweils vom gesamten Abschnitt einen Screenshot und benutze diesen als Hintergrundbild. Vorteil: Ich muss nur ein einziges Mal _GDIPlus_GraphicsDrawImage() benutzen; kommt der Performance zu Gute. Nachteil: Umständlich, wenn ich im Nachhinein etwas ändern will.

    3.) ??? (mir fällt nichts mehr ein)

    PS das Gitter soll wie ganz oben beschrieben bleiben.

    Habt ihr Ideen wie man es am besten realisieren könnte? Hat vielleicht jemand selbst schon ein solches oder ähnliches Spiel gemacht und eine akzeptable Lösung gefunden?

    Danke im Voraus für eure Tips und Hilfe

    Einmal editiert, zuletzt von pete_gzome (25. März 2012 um 09:35)

  • Möglichkeit 3)
    Erstelle mit _GDIPlus_BitmapCreateFromGraphics eine neue Bitmap.
    Zeichne zum Beginn des Levels alle Tiles auf diese Bitmap
    Während dem Spiel zeichnest du nur diesen Buffer.
    Bei Änderungen auf dem Spielfeld bearbeitest du dann wieder diese Bitmap.

  • Danke für deine Antwort.

    Ich habe es aber jetzt anders gemacht. Ich habe mir einen kleinen Map-Editor gemacht, mit dem ich die tiles ganz einfach ändern und dann die map abspeichern kann. :thumbup:

  • Ich hätte es jetzt auch so gemacht wie prograndy.
    Wenn es auf die Geschwindigkeit ankommt solltest du direkte DllCalls nutzen und Bilder per BitBlt Zeichnen.
    Das geht um einiges schneller als per GDI+
    (Macht an Oft aufgerufenen Stellen am meisten Sinn, z.B. das Zeichnen des Hindergrundes auf den Backbuffer.)

    lg
    M