Invalidate richtig nutzen aber wie?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von joscha999.

    Invalidate richtig nutzen aber wie?

    hey com.

    ich hab grade das problem das wenn ich viel graphisches in das paint event packe alles "lagt" und wolt deswegen fragen wie man sowas mit invalidate am besten umgehen kann also das nur bestimte stellen neugezeichnet werden wie z.b. die an den vier seiten liegenden 10 pixel (vom rand aus gesehen) oder wen ich (in diesem fall einen Tower (32x32 pixel) setze dort neugezeichnet wird?
    bin ja grade dabei ein Tower defence game zu schreiben (wer meine signatur gelesen hat weis das) so da mus ich die map am anfag zeichnen und wenn man einen tower setzt den zeichnen das mit dem invalidate hätte ich ja jetzt aber wo sol ich die aufforderung dafür reinhauen ?
    da ich das game in fulscreen machen will ist es eigentlich nicht nötig an den rendern zu rerawen
    Invalidate ist, wie wenn du - Sorry an alle Betroffenen für den Vergleich - in der Friss-dich-zu-Tode-Burger-Hütte ein Cola auf den Boden fallen lässt. In Kürze ist jemand mit dem Wischer da, der den Dreck wieder weg macht. Deine Aufgabe ist es, nach dem Malheur den Putztrupp zu holen (=Invalidate). Im Optimalfall zeigst du noch an, wo gewischt werden muss. (Das wäre der zweite Link von oben).

    Du musst in deinem Programm Positionen deiner Elemente berechnen. Irgendwo geschieht das. Dort sagst du dann: "OK, es gibt neue Positionen, mach den Bereich ungültig. INVALIDATE". Daraufhin zeichnet Windows die ungültigen Bereiche neu (=Paint-Event).

    -- Meine aufrichtige Entschuldigung geht an alle Mitarbeiter von Friss-dich-zu-Tode-Burger-Hütten -- :D
    ?(
    Nach deiner Berechnung: Invalidate!
    Paint-Event: Zeichnen!

    That's it.

    Example - leere Form - 1 Picturebox - 1 Button - Copy&Paste

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim t As String
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. t = Date.Now.Millisecond.ToString
    5. 'picturebox1.invalidate
    6. 'hier nicht notwendig, da NACH dem LOAD-Ereignis die Form sowieso gezeichnet wird.
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. t = "Button gedrückt: " & Date.Now.Millisecond.ToString
    10. PictureBox1.Invalidate()
    11. End Sub
    12. Private Sub PictureBox1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    13. e.Graphics.DrawString(t,
    14. New Font("Arial", 16),
    15. Brushes.Red,
    16. New PointF(0, 0))
    17. End Sub
    18. End Class