2009-05-04 10 views
1

vb2005パネルでちらつきを減らすにはどうすればよいですか? 親パネル内には、私が使用している他のパネルが2つあります。パネル内の画像を変更するとちらつきが減少する

最も外側のパネルには背景スプライトが含まれ、最も内側の2つのパネルは背景スプライトの場所に合わせて変更されるオーバーレイです。

オーバーレイスプライトを変更するとき、フリッカーを減らして、あるスプライトから次のスプライトへスムーズに移行したいと思います。新しい値は、あなたがこの答えを好きでするつもりはない

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 

答えて

3

古い値と同じであればここで

は、オーバーレイパネルが変更されていない オーバーレイパネル内の画像を変更するコードです。このフリッカーは、デフォルトの.NETパネルがダブルバッファされていないために発生します。そのため、すべての描画がバックバッファではなく可視メモリに直接行われます。

Panelクラスをサブクラス化し、新しいクラスでダブルバッファリングを有効にする必要があります。これは、OptimisedDoubleBufferingとDoubleBufferingが有効になっているフラグを使用して、コンストラクタでの呼び出しを行うことによって実行できます。

ダブルバッファされた新しいパネルクラスを作成したら、標準パネルではなくアプリケーションで使用できます。

私はあなたが答えを好きではないだろうことを言った。

+0

興味深い方法 – Jim

0

レインは右である)、サブクラス化が最良の方法です。ただし、その呼び出しをUpdateからInvalidateに変更してください。それは少し助けるかもしれない。

関連する問題