Mehrere Zeichenebenen in XNA erstellen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Streamfighter.

    Mehrere Zeichenebenen in XNA erstellen

    Hallo,

    Ich bin gerade dabei meinen GDI-Programme auf XNA umzuschreiben. Dabei ist folgendes Problem aufgetaucht:

    Ich zeichne 10.000 Elemente in eine Minimap ein. Was auch relativ flott läuft.
    Allerdings soll auf den Mauszeiger ein Fadenkreuz gezeichnet werden, dessen Position immer aktualisiert wird, sobald man die Maus bewegt.
    Leider muss ich die unter dem Fadenkreuz liegenden Elemente dann aber wieder neu zeichnen, obwohl diese sich garnicht verändert haben.
    Dabei fängt dann natürlich alles an zu laggen.

    Ich hab mir bei dem ursprünglichen GDI-Programm ein eher unprofessionelles Ebenenkonzept ausgedacht, wobei bei Mausbewegungen immer nur eine transparente über den Elementen liegende Ebene mit dem Fadenkreuz neugezeichent wird.
    Leider hab ich noch keine Möglichkeit gefunden wie ich diese Ebenen auf XNA übertragen kann.

    Gibt es hierfür vllt schon eine Funktion in XNA? Oder hab ich einfach die falsche Vorgehensweise?

    Ich hoff mal ich hab mich verständlich ausgedrückt, sollte was unklar sein, fragt einfach nach.
    Ok, hab ich noch nie gehört. Geh mal eben googeln.
    Also wenn ich das richtig verstanden habe speichere ich die ganzen Elemente in einer Textur.
    Dann zeichne ich bei jedem Mausmove nur 2Texturen, das Targetteil und das Fadenkreuz.

    Das müsste vom Prinzip her mein Problem lösen,
    Danke wenn ich was nicht versteh mit dem Target meld ich mich nochmal.

    Meine Lösung

    Es hat geklappt, ich hab mich noch etwas eingelesen und jetzt funktioniert es.

    Hier mein Code:

    VB.NET-Quellcode

    1. Dim RTarget As RenderTarget2D = New RenderTarget2D(G.GD, Size.Width, Size.Height)
    2. Dim ShadowTex As Texture2D
    3. G.GD.SetRenderTarget(RTarget)
    4. G.Begin()
    5. G.Draw( '10.000 Elemente zeichnen
    6. G.Ende() 'KEIN G.Present
    7. ShadowTex = RTarget
    8. G.GD.SetRenderTarget(Nothing)
    9. G.Begin()
    10. G.Draw(ShadowTex, 0, 0)
    11. G.Draw(... 'Fadenkreuz zeichnen
    12. G.Ende()
    13. G.Present()


    Grüße und nochmal vielen Dank für den Tipp