まず写真(bridge.bmp)をあらかじめ作成しておいたオフスクリーンサーフェイス
(lpGraph)へ読み込んでおきます。
次に、高速化のためにサイン・コサインテーブルを作成します。
普通は360度で一周ですが、今回は256度で一周とします。
こうすることで fsin[BYTE(...)] と、BYTE型(unsigned char型)にキャストするだけで
不正なアクセスを防ぐことが出来ます。
次に、あらかじめ各座標毎に、中心からの距離・中心への角度(0-255度)を算出しておきます。これも高速化のためです。
距離の算出については、上の方でやりましたね?また、角度の算出については「
ゲーム制作基礎 第11回」でやりました。
まぁ、↑のは大体解ると思います。ゆれの大きさの部分に関しては前回・前々回と大体同じです。
次に、あらかじめ画像を読み込んでおいたサーフェイス(lpGraph)と、作業用サーフェイス(lpWork)
をロックし、そのサーフェイスへの先頭アドレスを取得します。
サーフェイスのロックについては「
DirectDraw基礎 第12回」で
やりました。
そんでもって次のが心臓部。
ポインタいじりまくりですね。ポインタの概念がしっかり解っていないと理解出来ないと思います(^^;
まず、今までの演出は「転送先の座標を計算する」というパターンですが今回はこれでは穴が空くので逆に
「転送先が転送元の座標を計算する」方法でやっています。
ですから画面全体(320x240)について全て計算を行います。
おおまかに説明すると、「画面中心からの距離(p_length)+時間(count)」
を使ってサインカーブを参照し、ゆれの幅を計算します。その揺れの幅分だけ
転送元の座標を中央に向かってずらします。あとは転送元の色を転送先へ転送します(ぉ。
一通り終わったらロックを解除し、一度バックバッファへ転送し、フリップして画面に表示させます。
解ってしまえば簡単ですね(^^;
細かい部分で何か解らない事があれば掲示板へどうぞ。