DirectDraw!

ああ・・・
なんてややこしいんだ
DirectDraw!
おとといの日記で
「明日あたり説明する」
みたいなことを
書いていましたが、結局研究に2日も
費やしてしまいましたYO(馬鹿

えっとですね・・・
なんとも不思議なことに、
ウインドウモードだったらDirect3DRMは
プライマリサーフェイスからCreateDeviceを
実行しなくても、Clipperだけで
描画することができてしまうんです。
ここに落とし穴が・・・w

メニュー表示にはDirectDrawを使います。
Bltまたはフリップしてあらかじめ用意した
ベース画像を出すように組んでいきます。
ところがですね、
ウインドウモードだからといって、
バックサーフェイスもプライマリサーフェイスも
ろくに定義せずにプログラム組んでいたら
「どこにベースを転送するんじゃ~!!」と
頭が爆発いたしました。(ぇ

解決法は簡単。
面倒ですがサーフェイスを作ります。
プライマリとセカンダリ(バック)サーフェイス、
そしてメニューベース画像保持用サーフェイス。
RMはちゃんとこのバックサーフェイスに作り、
メニューなどの必要オブジェクトを全てBltし、
さらにBltを使い、全部整ったバックから
プライマリへ転送します。
これで完璧。エフェクトなども楽勝。
なぜこれが必要なのかは、
実際にプログラムを組むとわかります。
プライマリへ直接Blt(さっきから出ているが
これはブリットの略)すると、表示まで
間に合わずにちらつきが出てしまいます。
かなりこれ、目に悪いです。
というわけで、綺麗な表示のためには
予備サーフェイスが必須のようです。

あと・・・
Rectについてですが・・・
実は、ウインドウのHeight、WidthやLeft、Topの
単位はTwipsといって、よく画面解像度に
ある「640×480」とはぜんぜん値が違います。
これをどうやってRect型に入れるか。
微妙に悩みました・・が、
どういうわけか15分の1にすると
ちょうどピクセル単位になります。
あっさり解決しましたw
あと、タイトルバーとか、ウインドウの
クライアント領域の外側に当たる部分が
微妙な幅を占めているのでこれを考慮する
必要がありました。WindowsXPではやけに
これが大きいので、ウインドウスタイルは
通常にしてはいけませんね。
なかなかこれは調整が微妙で、
何度か実行して決めます。

そんなところかな・・・
今日はいろいろとデバイスや
ディスプレイモードの列挙とか
インプットデバイスの列挙とか
できるようになりました。
まぁまあ進歩したってところでしょう。
ゲームが出来るまではまだ遠いですね。
監督が、春休み中に完成させるぐらいの
意気込みでいてくれればこちらとしても
本気が出るんですがね。

You may also like...

コメントを残す

メールアドレスが公開されることはありません。