コントロールのサイズのオフスクリーン バッファを使用します。
最初は簡単な方法で行います。オフスクリーン バッファ全体を正しい位置にスクロールして描画します。準備ができたら、実際の画面にブリットします。
これが遅すぎる場合は、オフスクリーン バッファ全体を再描画するのではなく、垂直方向に分割して最適化してみてください: (ここでは、概念を理解しやすくするために、ここでは水平スクロールの動きについてのみ説明します。しかし、この方法は8方向スクロールも可)
これを実装するのはやや難しいですが (そのため、最初に単純なアプローチを提案しました)、絵が描かれた紙を想像してみてください。左側を包み込み、右側に接着します (チューブが得られます)。このようにして、紙を無期限にスクロールできます (チューブを y 軸を中心に回転させることにより)。
同様に、オフスクリーン バッファでも同じことができます。完全なコンテンツを描画してオフスクリーン バッファを準備します。
ここで右にスクロールすると、基本的にオフスクリーン バッファが 2 つに分割されます (この垂直分割によって (接着剤があった例の紙のように))。右に 10 ピクセルスクロールすると、次のようになります。
- 分割の右側 (ピクセル 10 にある) をコントロールのピクセル 0 にコピーします。(したがって、(10, 0) - (幅 - 高さ) から (0,0) までの領域全体
- 次に、分割の左側をコピーします。ピクセル 0 から 10 をピクセル幅 10 にコピーします。そう: (0,0)-(10,高さ) から (幅-10, 0)
これを行う前に、変更されるピクセルのみを再描画します (この場合、10 ピクセルをスクロールしたため、10 ピクセル)。他のすべてのピクセルは同じままであり、再描画する必要はありません。
それを本当に理解するには、自分でこれを紙に描く必要があります。これは、リソースが限られているプラットフォーム (携帯電話など) でのゲーム開発では非常に一般的な手法です。
すべての方向への ps スクロールは、まったく同じ方法で実現できます (ただし、正しく行うのはさらに困難です) ;^)