Reducir el parpadeo cuando cambias imágenes en un panel
Pregunta
¿Cómo puedo reducir el parpadeo en un panel vb2005? Dentro del panel principal tengo otros 2 paneles que estoy usando.
El panel más exterior contiene un objeto sprite de fondo y los dos paneles más internos son superposiciones que cambian para adaptarse a los lugares del elemento sprite de fondo.
Cuando cambio los sprites de superposición, me gustaría reducir el parpadeo y hacer que la transición de un sprite a otro sea suave.
Aquí está el código que cambia las imágenes en los paneles de superposición el panel de superposición no se cambia si el nuevo valor es el mismo que el valor anterior
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
Solución
No te va a gustar esta respuesta. El parpadeo se debe al hecho de que el panel .NET predeterminado no tiene doble búfer, por lo que realiza todos los dibujos directamente en la memoria visible, no un búfer posterior.
Debe subclasificar la clase Panel y habilitar el búfer doble en la nueva clase. Esto se puede hacer haciendo un
SetStyle
llame al constructor con los indicadores OptimisedDoubleBuffering y DoubleBuffering habilitados.
Una vez que tenga la nueva clase de panel con doble búfer, puede usarlos en su aplicación en lugar del Panel estándar.
Te dije que no te gustaría la respuesta;)
Otros consejos
Rein es correcto, la subclasificación es la mejor manera. Mientras tanto, sin embargo, cambie esa llamada de Actualizar a Invalidar; Eso podría ayudar un poco.