第36章 アニメーションの基礎  


今回は、話題をころっと変えて「アニメーション」 についてです。まず、最初は文字を移動させる方法を 考えてみます。映画は、なぜ動いて見えるかというと 一こま一こま止まっているのですが、人間の目には 「残像」とかいうものがあって、すぐ前に見た画像が 頭に残っているのです。この頭に残っている間に 次の画像を表示すると結果として動いて見えるわけです。

では、具体的にはどうすればよいのでしょうか。文字を 左の隅から、右の隅まで動かす方法を考えてみましょう。

手順 (1)右隅に文字を表示(文字列でもよい) (2)空白の文字で(1)の文字を消す (3)(1)で書いた文字のすぐ右隣に同じ文字を表示 (4)この文字を空白で消す 以下繰り返し

これで、動いて見えるはずです。 あまりに速く動いてしまう場合は、途中で 意味のないループを作って時間稼ぎをしましょう。 文字を特定の場所に表示するには 第26章を参照してください。 では、早速プログラムを作ってみましょう。

#include <stdio.h> #define clear_text() printf("\x1b[2J") int set_position(int, int); int main(void) { int i, j; char *str = "粂井"; char *cls = " "; clear_text(); for (i = 1; i <= 76; i++) { set_position(i, 1); printf(str); for (j = 0; j <= 200; j++) { set_position(1, 2); printf("*"); } set_position(i, 1); printf(cls); } return 0; } int set_position(int x, int y) { printf("\x1b[%d;%dH", y, x); return 0; }


上のプログラムは、たいして難しくはないですね。 最近のマシンはすごく速いので普通に?時間稼ぎを しても、あっという間に終了してしまいます。 そこで、上のプログラムではprintf("*");を 同じ場所に200回表示させています。 仕事をさせずに空ループだけ回しても、ループ回数を ムチャクチャ多くしないと速すぎます。 ただし、こういった時間稼ぎのプログラムでは DOSの場合だけにしておいてください。DOSでは、 原則的に一度に1つのアプリケーションしか動きません。 それで、時間稼ぎをしようが何をしようが他の アプリケーションに迷惑をかけません。 ところが、Windowsのようなマルチタスク環境では 自分のアプリケーションのほかに、人様の アプリケーションも動いています。 公衆道徳を守りましょう と、いうことです。
さて、上のプログラムでは「粂井」という文字が 横にさっと動くだけですね。今度は、右はじまで行ったら 下向きに動いて、一番下まで行ったら斜めにあがって・・・ というふうに少し複雑な動きをするようにプログラムを 書き直してみてください。

では、グラフィックを動かすにはどうしたらよいのでしょうか。 原理は文字の時と同じです。しかし、もう少し知識が必要です。 大昔のBASIC(インタプリタの時代の)の時にはGET@とかPUT@とかいう命令 がありました。これは、画面の特定部分を記憶したり、あるいは記憶した 画像を表示したりする命令です。文字の時と同じ要領で これらの命令を使ってグラフィックスを動かすことができます。 Cの場合は、グラフィックス関係 の関数はANSIで認められていないので処理系特有の関数を使うことになります。 ちなみに、マイクロソフトの製品では_getimage()とか_putimage()という 関数が用意されています。みなさんのコンパイラではどんな関数が 使えるのかヘルプ等で調べてみてください。また、画像を表示するとき 背景の画像とどのように合成するかという問題も起こってきます。 しかし、そんなに難しいことはありません。この章まで理解された 方にとってはびしびし動き回るアニメーションも比較的簡単に 作れるでしょう。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Dec/02/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。