« MacOS X Carbonでの getlogin() | Main | jrogue for MacOS X 公開 »

MacOS X Carbonでの 画面描画

昔のQuickDrawだったら、Windowに何かを描画すれば、ただちに画面に反映される。しかし、MacOS Xでは、Windowへの描画は常にバッファリングされており、OSが適切に画面にその内容をフラッシュする。つまりいつでも勝手にオフスクリーンに描かれているような物だ。このため、Windowが他のWindowの陰になったり、スクリーンからはみ出しても、欠けた部分の内容は保持されており、旧来の意味でのアップデート処理は必要ない。

ところで、実際にバッファから画面に書き出されるのはいつか。通常適当に描画を行って、放っておけば、確かにきちんと描画される。しかし、一つの関数の中でループを回し、連続的に描画した場合、その過程は画面に反映されず、最後に描いた内容が表示される事になる。

Carbon版jrogueで、キャラクターの連続移動が描画されない理由はこのあたりにあるらしい。最初、理由がわからず、描画の度にQDFlushPortBuffer()を呼び出していたが、連続移動のアニメーション処理は、キャラクターの移動だけではなく、飛び道具を使うとか、ドラゴンが炎を吐くとか、バラバラな場所で様々に使われているため、いちいちそれらの関数を探してループに手を加えるのも巧くない。というわけで、cursesの画面リフレッシュ関数の中で、メインイベントループ呼び出してやる事にした。前に書いたように、今回のjrogueでは、もともとのjrogueのメインプログラムと、GUIに関わるメインイベントループを切り離して、それぞれ別スレッドにしてあるため、YieldToAnyThread()を挟むだけで済んだ。従来型のプログラムだったら、WaitNextEvent()なり、EventAvail()なりを入れてやれば描画のアップデートはそのときに行われるのではないかしらん。

|

« MacOS X Carbonでの getlogin() | Main | jrogue for MacOS X 公開 »

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/111828

Listed below are links to weblogs that reference MacOS X Carbonでの 画面描画:

« MacOS X Carbonでの getlogin() | Main | jrogue for MacOS X 公開 »