■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第17夜:終了 え〜、突然ですが、本講座は本日を持ちまして終了です。 ・・・というのは悪質な冗談です(大爆死 ^0^)。今回は「終了」コマンドを実装します。本当なら「改ページ」を行いたいところなのですが、早いうちにスクリプト上から明示的に終了を宣言できるようにしておかないと、文章の終端以降、延々とゴミを表示し続けるハメになってしまいますので・・・(現在はページ端に達したところで強制終了になっています)。
実装は、カーソルブリンクと良く似た形になります。ソースはこちらです。 ■処理の概要 基本的にこの実装は「遅延」の一種です。オリジナルの遅延処理は終了条件として「一定時間の経過」を定めていましたが、今回はプレーヤーがマウスクリックするまで待つ、ということですから終了トリガはイベントハンドラになります。形式としては「カーソルブリンク」のカーソル無し版に近いものになります。そしてマウス(キー)入力を検知したら、テキスト表示を再開するのではなく、そのままプログラムを終了させてしまいます。 ■フラグ 以下のように flag_halt を創設します(main.h参照)。 |
struct _Mode_stat {
|
■コマンド解釈部 以下のようにコマンド初期化関数 Com_halt() を追加します。(TextEngine.cpp 参照) |
void Command_call() {
} |
■Mainloop() void Mainloop(void)
} |
■撃つ コマンド初期化関数で行う内容は、フラグ操作のみです。テキスト表示を止めて、終了処理のフラグを立てます。 |
int Com_halt() {
} |
■回す 今回はキー入力があれば即終了なので、何もすることがありません。タイマーチェックも無しです。 int Com_halt_task() {
} |
■締める 前回のカーソルブリンクと同様、WM_LBUTTONDOWN、WM_KEYDOWN でマウス左ボタン、スペース/リターンキーをチェックし、押されていれば終了関数 Com_halt_end() を呼ぶようにします。 |
LRESULT WndProc(HWND hwnd,UINT msg,WPARAM
wprm,LPARAM lprm) {
|
終了関数では、終了するときの常套句、PostQuitMessage() を終了コード0で投げてプログラムを終了させます。・・・これだけ(笑) int Com_halt_end()
} え? 「随分あっさりした解説だ」 ですって? …それはですね、内容的に以前実装した「遅延」の変形版であるということもありますが、最初に「定型化」のタネを蒔いておいたからです。コードがパターン化してしまえば追加/改造がラクになります。…そういえば、不思議なことですが、WEBを見渡しても「細かいTIPS集」みたいなページはたくさんあるのですが、構造的なハナシを低レベルで解説してくれているところはあまり見かけませんね…なぜでしょう(^^)。 蛇足的に付け加えるなら、上記の解説は一部インチキ(笑)を含んでいます。タスク処理の中身は空っぽですから、Mainloop() に追加した部分は意味がありません。実際にフラグを参照しているのはイベントハンドラの中だけです。・・・しかしまあ、これも多少無理にでも定型化して示して行こうという一種の方便ですので、許容して頂きたいと思います(汗 ^^;) なおここではまだ考えませんが、MIDIやCD-DAでBGMを流していた場合は PostQuitMessage() の前に演奏を終了させておく必要がありますのでご注意下さい。 |