■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第25夜:画面切替えB(伸縮タイプ) さらに調子にのって?(^^)、#g_change コマンドを拡張してみましょう。あまりこればかりやりすぎてもヒンシュクものでしょうから、切替えに関してはこれで一区切とします。
単にアコーディオンのように「びろ〜ん」と広がるだけですが、簡単なのでX/Y双方のバージョンを用意しましょう。ソースはこちらです。 ■フラグ main.h の _Mode_stat のメンバに変更はありません。 ■コマンド解釈部 ここも変更はありません。 ■撃つ 基本は同じですが、パラメータ解釈部分に追加があります。新しく TYPE_STRETCH_X、TYPE_STRETCH_X というシンボルを定義して、#g_change コマンドのパラメータに併せて g_change_type に識別コードを設定しています。他は前回と同じです。 |
DWORD g_change_timer; //大麻・・・じゃなくてタイマ #define TYPE_CURTAIN 0 int Com_g_change()
} |
■回す/締める ここも、前回の要領で理解できますね。Mainloop()から呼び出される Com_g_change_task() は、タイプ指定に応じてそれぞれの処理関数を呼び出しているだけです。伸縮型のタスクは、X方向が sub_Com_g_change_task_3()、Y方向が sub_Com_g_change_task_4() となっています。 |
int Com_g_change_task() {
|
では、タスクの中身を見てみましょう。背景画面全体(640×480ピクセル)をX/Y方向に潰れた矩形領域に伸縮転送しているだけです。前回の放射エフェクトより簡単ですね。ただし、StretchBlt() は動作が遅いのでピッチを荒めにしてごまかし?を図っています(笑)高速なマシンなら「すこっ」と動きますが、遅いマシンだと「うにょろぉぉぉ〜ん」という感じになってしまうかも知れません。個人的にはタイマーチェックの部分を前回、前々回と別にしてやりたい気もしますが、まあとりあえず放っておきましょう(ぉぃ)。 |
//---------------------------- int sub_Com_g_change_task_3()
//---------------------------- int sub_Com_g_change_task_4()
|
これを実行すると以下のようになります。まあ、場面に応じて使い分け・・・でしょうか(^^) |
|
|