■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第19夜:改ページA さて、実は今回も改ページについてです。「え〜〜、前回やったじゃない」という声が聞こえてきそうですが、今回は改ページコマンドとしての実装ではありません。#page コマンドに遭遇しないままテキスト表示が画面下端まで行ってしまった場合の対応です。一種の禁則処理ですね。 さっそくですが仕様です。
・・・なんだか面倒そうな動作ですが、いままでインプリメントしてきた各種コマンドの要素を合体させれば実現できそうです。実際、トリガの位置が異なるだけで他はいままでのコマンド実装と同じ要領で実装できてしまいます。ソースはこちらになります。 ■処理の概要 カーソルブリンクの応用になります。改行処理でテキストエリアをはみ出すときにカーソルブリンクと同等のタスクを回し、キー入力(マウスクリック)を検出したら改ページ@(前回)相当の処理を行います。 ■フラグ 改ページ type2 ということで、以下のようなフラグ(・・・そのまんまやんけ ^^)を追加します。 |
struct _Mode_stat {
}; |
■トリガ あれれ、TEXT_X_PITCH*4 て何だ?・・・という方、鋭いです(^^;) 注意深くこのシリーズを読んできた方なら気がついているかもしれませんが、ここでいう TEXT_X_PITCH というのは半角英数字の幅なので、TEXT_AREA.right から TEXT_X_PITCH*4 戻った位置というのは全角文字2つ分ということになります。え〜っ、それじゃ半角文字が丁度ページ末に来たら1〜2文字分ずれてしまうじゃないか〜、という声が聞こえそうですが、まあ英文でノベルを書かない限りほとんどの場合は日本語の文章を表示する訳で、ここでは敢えて目をつむりましょう(爆)。どうしても、という方はそんなに難しい処理ではないので各自工夫してみてください♪(たまにはそのくらいの宿題は出さないと・・・ ^^) |
void Increment_textp_pos(int inc)
{
|
|
■撃つ それでは、処理のファーストショットです。以前に実装したカーソルブリンク(第16夜)と同じです。省資源?のためにここではタイマー変数を間借りしていますが(=同時に2つブリンクすることは無い)、将来的にバグの混入を防ぎたいなら専用のタイマー変数を用意しても良いでしょう。 |
int Com_page2() {
} |
■回す int Com_page2_task()
|
■締める 単純なカーソルブリンクと違うのは、最後の締めが「改ページ」(第18夜相当)になっていることです。前回の処理が分かっていれば、特に解説は不要だと思います。(…単に BitBlt() 一発ですし:笑) |
int Com_page2_end() {
} |
さて、サンプルソースをコンパイル→実行してみて感じが掴めたでしょうか? 今回は過去のコードのコピー&ペーストで済んでしまうような内容でした(笑)。こーゆー基礎的な部分は「似て異なる処理」が多くて閉口することもありますが、最低限の処理はインプリメントしておきましょう。それはともかく、ここまでくると制御文字として禁則している「#」や「;」、半角カナを含まない文章なら、特にスクリプトコマンドを埋め込まなくても普通にページ単位で表示できるようになります。だんだん汎用性が出てきましたね。 |
|