GDI+ Nur bestimmtes Rectangle neu Zeichnen

  • VB.NET

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    So schwer ists jetzt auch nicht, sind in dem Fall ja nur etwa 10 Zeilen Code und halt noch die entsprechenden API-Funktionen. Es ist (auch zu meinem Leidwesen) nunmal die einzig richtig funktionierende Variante in Verbindung mit Threads, GDI+ ist mir da bisher immer abgekackt.
    So ich habe nun das so gemacht

    ->Bild wird in eine Bitmap Gezeichnet -> Dieses Bild wird in der Paint Methode auf das Form gezeichnet. Aber es Flackert immer noch. Zusätzlich habe ich

    VB.NET-Quellcode

    1. With Graphics.FromImage(GrapicBuffer)
    2. ' DIESE ZEILEN HINZUGEFÜGT
    3. .InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
    4. .SmoothingMode = Drawing2D.SmoothingMode.HighQuality
    5. .PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
    6. ' Drawing Rectangle festlegen
    7. Dim drawrect As New Rectangle(0, 0, Texture.Width, Texture.Height)
    8. ' Hintergrund Zeichnen
    9. .DrawImage(Texture.TextureBitmap, drawrect)
    10. ' Game Objekte Zeichnen
    11. For Each gameObject As GameObjekt In ListofObjects
    12. .DrawImage(gameObject.Objeckt, gameObject.Location.X, gameObject.Location.Y, gameObject.Size.Width, gameObject.Size.Height)
    13. Next
    14. ' Spieler Zeichnen
    15. .DrawImage(Sprites.Item(0).PlayerTexture, Sprites.Item(0).PlayerLocation.X, Sprites.Item(0).PlayerLocation.Y, Sprites.Item(0).PlayerSize.Width, Sprites.Item(0).PlayerSize.Height)
    16. End With
    17. GameFrame.Invalidate()


    aber das bild Flackert immer noch und den DoppelPuffer oder wie der heißt bekomme ich nicht aktiviert da der irgendwas mit Protected ist.


    Danke Andy
    Danke,

    meinst du so ?

    VB.NET-Quellcode

    1. ' Initialisierung des Game Frames
    2. GameFrame = New Form(SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True))
    Nein. Eigne dir vielleicht erstmal Basiswissen in Sachen Polymorphie und Vererbung an, bevor du ne Engine entwickelst. Die Tatsache, dass du andauernd solche Fragen stellst und mit wichtigen Begriffen und Schlüsselwörtern nichts anfangen kannst, zeigt mir, dass da bei dir dringend Nachholbedarf besteht. Ebenso solltest du dich im Bereich GDI und Threading kundig machen, da mangelts dir auch am nötigen Wissen.
    Ich weiß, die Aussicht, ne eigene Engine zu erstellen, ist verlockend, aber dafür ist ein sehr hoher Stand erforderlich, um überhaupt mal irgend was halbwegs gescheit hinzubekommen, und wenn man den nicht hat, endets nur in Frust und schlechtem Code.
    @Artentus @Gonger96 @ThePlexian Danke für deine Hilfe hat alles Super Funktioniert ,ich war nur nicht ganz bei der Sache. Für jeden den es Interessiert wie es Funktioniert.

    1. Hintergrund und Objekte die Gleich Bleiben in einer Bitmap als Puffer Speichern
    2. Eine Klasse erstellen und von einem Form erben.
    3. In der Paint Methode des geerbten Form unser Hintergrund wo wir im Puffer als Bitmap laden (ist gut wenn die Map aus Vielen
    Objekten Besteht. So muss man die Map nur 1x Zusammen Setzen) und die Aktuelle Position des Players zeichnen.
    4. Ich habe in der OnLoad Methode meine Methode eingebunden die den Hintergrund Zusammen Setzt.

    und wichtig in den Konstruktor

    VB.NET-Quellcode

    1. MyBase.new()


    und noch

    Artentus schrieb:

    VB.NET-Quellcode

    1. SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
    2. UpdateStyles()
    Grüße Andy