ちらちら

また、小さいゲームを作っています。蛇ゲーム ( ? ) っぽい何かを作っています。

今日は SetPixel でちらつく問題が解決できたので、その方法についてメモ。

蛇の尻尾の部分を SetPixel で描いていたのですが、それが長くなるにつれてちらつくちらつく。何かいい方法はないかなと思い、探してみたところ「ダブルバッファリング」という方法を発見しました。

なんでも、バッファを二つ用意しておいて、描画してあるのを入れ替えるのだとか。描画するときに一瞬、背景が見えるからちらつくのだとか。そんな感じのよくわからないことが書いてありました。おまけにソースが Java 。わたしは C + SDK なので、コンポなんとかのほげほげとか書かれてもわかりません。Java ではライブラリにそういうものがあるのでしょうか。とにかく、理屈の上ではわかったので、あとは実現にむけて努力するのみです。

で、自分なりに考えて、それっぽいものを作ってみました。

CreateCompatibleDC で画面と互換性のあるメモリデバイスコンテキストを取得。CreateCompatibleBitmap で画面と同じ大きさのビットマップを作成。SelectObject でメモリデバイスコンテキストをビットマップと同じ形式(?)に。以前は画面に描画していたものを代わりにそのメモリデバイスコンテキストに描画。 最後に BitBlt でメモリデバイスコンテキストから画面へ転送。

これでいいのかはわかりませんが、ちらつきが減った(消えた?)ようなので解決したことにしました。