Flimmern zu reduzieren, wenn Sie Bilder in einem Panel ändern
Frage
Wie kann ich Flimmern in einem VB2005 Panel reduzieren? Im Inneren der Mutterplatte habe ich 2 weitere Platten, die ich verwende bin.
Die äußerste Panel enthält einen Hintergrund-Sprites und die beiden innersten Platten sind Overlays, die die Orte im Hintergrund Sprite passen ändern.
Wenn ich das Overlay-Sprites ändern würde Ich mag das Flimmern reduzieren und einen reibungsloser Übergang von einem Sprit, um zum nächsten zu machen.
Hier ist der Code, der die Bilder in den Overlay-Panels ändert die Overlay-Panel wird nicht verändert, wenn der neue Wert der gleiche wie der alte Wert
Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.Scroll, TrackBar1.Scroll
If (Panel2.Tag <> TrackBar1.Value) Then
Panel2.Tag = TrackBar1.Value
Panel2.BackgroundImage = tops(TrackBar1.Value) //img array for the top panel
Panel2.Update()
End If
If (Panel3.Tag <> TrackBar2.Value) Then
Panel3.Tag = TrackBar2.Value
If (TrackBar2.Value > 0) Then
Panel3.Location = New Point(182, 210)
Else
Panel3.Location = New Point(182, 209)
End If
Panel3.BackgroundImage = bottoms(TrackBar2.Value)//img array for the bottom panel
Panel3.Update()
End If
Lösung
Du wirst nicht diese Antwort mögen. Das Flackern wird dadurch verursacht, dass der Standard .NET-Panel ist nicht gepuffert doppelt - so es die ganze Zeichnung direkt im sichtbaren Speicher tut, keine Back-Puffer.
Sie müssen die Panel-Klasse, Unterklasse und doppelte Pufferung auf die neue Klasse zu ermöglichen. Dies kann, indem Sie ein getan werden
SetStyle
Aufruf im Konstruktor mit den Flaggen OptimisedDoubleBuffering und Doublebuffering aktiviert.
Wenn Sie die neue Panel-Klasse, die doppelt gepuffert ist, können Sie sie in Ihrer Anwendung anstelle des Standard-Panel verwendet werden.
Ich habe dir gesagt, du würdest die Antwort nicht mögen;)
Andere Tipps
Rein Recht, Subklassifizieren ist der beste Weg. In der Zwischenzeit ändert diesen Anruf von einem Update jedoch ungültig zu machen; das könnte ein wenig helfen.