■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第22夜:BMP転送 今回は、サーフェイス間のBITMAPの転送です。転送そのものは BitBlt() で一発で終ってしまいますので超簡単♪(笑)さっそく、さくっと行きましょう。 |
■書式:#g_copy dst_vram,dx,dy,src_vram,sx,sy,width,hight
|
なんだか解析パラメータが多くて大変そうですが、見かけだけです。解析用の小物関数は TextEngine.cpp 内にあるものをコールするだけですし、ここまで来ると実装そのものもルーチンワークのようになってきますね(^^) ■フラグ ■コマンド解釈部 |
void Command_call()
{
} |
■処理関数 もはや、解説する意味はないと思います(ううううむ ^^;)。だってパラメータ解釈して BitBlt() に渡しているだけですもの(爆笑)。…ちなみに、ここから講座を読みはじめた方向けに説明しますと、Kaiseki_TextStr() はスクリプトファイルから文字列を切り出す関数、kaiseki_10() は同じく10進数を切り出す関数で、TextEngine.cpp に記述してあります。パラメータ読みの間にある while( *TEXT==',' || *TEXT==' ' || *TEXT==0x0a )TEXT++; という記述はパラメータを区切る 「,」 やスペース、TABの読み捨てです♪ このパターンを覚えてしまえば、スクリプトからAPIをダイレクトに呼ぶのはカンタンだということが分かりますね♪(スピードの問題はありますけど… ^^) |
int Com_g_copy() {
} |
さて、こんな簡単なコマンドではありますが、ソースとサンプルスクリプトはちゃんと用意してあります。こちらをダウンロードして実行してみると、以下のような画面になると思います。これで、最低限の画面操作はできるようになった訳ですね。 |
|
ところで、実行してみて「あれ・・・なんか遅くない?」という感想を持たれた方もいると思います。そうです。現在の仕様ではサンプルスクリプト(default.txt)のようにコマンドをだ〜〜っと並べて記述した場合、その解釈プロセス毎に @1文字表示毎のウェイト と Aバックサーフェイス→表画面への全面転送 のタイムコストが上乗せされてしまうので遅くなってしまいます。特に現在の仕様では、文字表示ウェイトはスペースやTAB、改行の CR、LF にもすべてかかってきてしまいます。これを回避するいは@とAのプロセスをワープして解釈ルーチンを回せば良いのですが、少々面倒な処理なのでここでは割愛しておきます。拙作「彼女と触手」では既に解決していているのですが、まあ後日の楽しみということにしておきましょう(^^)
|