2008/05/03
初級ゲームプログラミング完全マニュアル [vol.0044 2008/05/03]
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┣┛ ┗┫
┃ 挫折不可能! 初級ゲームプログラミング完全マニュアル ┃
┃ ┃
┃ 第 44 号 2008/05/03 ┃
┣┓ ┏┫
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
- Ads space -
┌┬───────────────────────────────┬┐
││ はじめに ││
└┴───────────────────────────────┴┘
みなさま、こんにちは!
個人ゲーム制作アドバイザーの Byerkut です!
日差しが暖かいですね。
というか少し暑いです。
お風呂上がりには扇風機が必要になってしまいました。
この調子で夏が越せるのでしょうか…
さて、今日はゲームの画面に関するお話です。
┌┬───────────────────────────────┬┐
││本日のラインナップ ││
└┴───────────────────────────────┴┘
・今日のメインテーマ
【表の画面と裏の画面】
・考えようによっては、ためになるコラム
【表の画面と裏の画面が大事な理由】
・あとがき
┌┬───────────────────────────────┬┐
││ みんなの備忘録 ││
└┴───────────────────────────────┴┘
■Visual C++ 2008 Express Edition をインストールする手順
http://www.game-create.com/archives/235
■Visual C++ 2008 Express Edition でプロジェクトを新規作成する手順
http://www.game-create.com/archives/270
■VC++ 2005 EE でプロジェクトにソースファイルを登録する手順
http://blog.mag2.com/m/log/0000240151/108824854.html
■画像ファイルを LoadImage() 関数で読み込めるようにする手順
http://www.game-create.com/archives/308
┏┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳┓
┃┃ ┃┃
┃┃ 今日のメインテーマ ┃┃
┃┃ ┃┃
┃┃ 【表の画面と裏の画面】 ┃┃
┃┃ ┃┃
┗┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻┛
先週までのメルマガで、画像ファイルの内容を画面に表示する
プロセスを知ることができました。
これを応用すると、とってもゲームらしいプログラムを
組むことができるのですが、ひとつだけお伝えしたいことがあります。
それは…
ゲームには表の画面と裏の画面がある
…ということです。
では、具体的に見ていきます。
まずは、以前配布したサンプルをご覧ください。
http://www.game-create.com/archives/309
見ていただきたいのは「サンプル2」の方です。
今まで「サンプル1」を使っていたので間違えないでください。
今回見ていただきたいのは「サンプル2」の方です。
ダウンロードが終わりましたらビルドして実行してみてください。
このとき、同梱されている画像ファイルをプロジェクトファイルと
同じディレクトリにコピーする必要がありますので注意してください。
詳しくは過去記事を参照ください。
http://archive.mag2.com/0000240151/20080330192119000.html
http://www.game-create.com/archives/308
以前のファイルが残っている場合は、そちらでかまいません。
さて、実行してみた感想はいかがでしょうか。
チラつきがひどくてとても見れたものではありませんよね。
おそらく、これでゲームをしたい人はいないはずです。
なぜ、こんな事態になってしまうのか?
そして、これを解決するためにはどうしたらいいのか?
それが今回のテーマです。
この問題の解決方法を見つけるためには、そもそも、ゲームの画面が
どうやって動いているのかを知る必要があります。
まず、確認しておきたいことがあるのですが、
ゲームの映像というのはテレビの画面に表示されますよね?
(携帯ゲーム機の場合は本体にディスプレイがくっついていますが、
今回はとりあえず考えないようにしてください)
さて、テレビの画面には何が映ると思いますか?
バカバカしい質問で申し訳ないですが、答えはテレビ番組やビデオです。
では、テレビ番組とビデオの特徴は何でしょうか?
ばかばかしい質問で申し訳ないですが、答えは映像が動くことです。
テレビ番組やビデオは、あらかじめ収録しておいた映像や
遠隔地で撮影されている映像(生放送番組など)を
自分の部屋で再生できる点が最大の魅力かと思います。
しかし、テレビ番組やビデオの映像は、先ほど実行していただいた
サンプルのようにチラついてはいませんよね?
つまり、テレビ番組やビデオの映像はチラつきの対策がされているのです。
テレビ番組やビデオがやっている方法を突き止めることができれば、
チラつきのないゲーム画面を作ることができそうです。
なんせ、ゲームも最終的にはテレビに出力するわけですから、
テレビ番組やビデオにできて、ゲームにできないはずがありません。
さて、この方法を突き止めるための題材はアニメです。
アニメを想像してください。ゲームもアニメも、
現実にはない映像を扱うという点で非常に似ているのです。
アニメもテレビ番組やビデオと同様に映像が動くという特徴がありますが、
具体的にどうやって絵を動かしているのかご存じでしょうか?
「バカにするなハゲ」
…という怒号が聞こえてきそうですが、
ご存じない方のために解説させていただきます。
実はアニメというのは、だいたい 1/24 秒の間隔で、
少しずつ違う静止画を連続で表示しているのです。
「少しずつ違う静止画」というのがポイントです。
少しずつ違う静止画を 1/24 秒という極めて短い間隔で連続で表示すると、
人間の目にはあたかも一連の静止画が動いているように見えるのです。
パラパラ漫画というのを作ったことはありませんでしょうか?
まさにあの原理を応用しているのがアニメーションなのです。
パラパラ漫画をご存じない方はこちらを参照ください。
http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%A9%E3%83%91%E3%83%A9%E3%83%9E%E3%83%B3%E3%82%AC
いやぁ、ウィキペディアは非常に良くまとまっていますよね。
私の説明より数段わかりやすいです。
実は、ゲームの場合も同じなのです。
めまぐるしく変わっているように見えるゲームの画面というのは、
少しずつ違う静止画を連続で高速に表示しているだけなのです。
以前のメルマガで「ゲームの画面は1秒間に 60 回更新されている」と
お伝えしたのですが、今回のお話はそこへつながっていきます。
では、なぜアニメの映像はチラつかないのに
ゲームの映像はチラついてしまうのでしょうか?
まず、アニメがチラつかない理由から考えてみましょう。
アニメの制作というのはセル画と呼ばれる用紙に
少しずつ違う絵を描いていき、
最後に連続で再生するという手順を踏みます。
この手法には次のような特徴があります。
1:再生される段階では全ての絵(静止画)ができあがっている。
2:あらかじめ決められた映像しか再生することができない。
実は、アニメがチラつかない理由は1に集約されているのです。
アニメは「決められた映像しか再生できない」かわりに、
「再生される段階では全ての絵(静止画)ができあがっている」
というメリットがあります。
ゲームの場合はこうはいきません。
なぜなら、ゲームの場合は「決められた映像しか再生できない」
というのは致命的な欠陥だからです。
ゲームの映像というのは状況によって変化します。
スティックを倒せばプレイヤーが動くかもしれませんし、
ボタンを押せば拳銃の弾を発射するかもしれません。
すべての状況をあらかじめ静止画で用意しておくには
時間と容量がたりません。
つまり、ゲームの画面は毎回状況に応じて違う絵を描く必要があるのです。
しかし、ここまで流れで「なるほど!わかった!」と思って
何も考えずにプログラムを組むと、前述の「サンプル2」のような
チラついた画面になってしまいます。
これはなぜでしょうか?
実は、ゲームの場合は毎回違う絵を描く必要があるため、
「まだ、描いている途中の絵が見えてしまう」という問題があるのです。
ゲームに限らず、プログラムとは非常に高速に実行されますので、
1秒間に数十回グラフィックを表示することができます。
そんな高速に動作する仕組みの中で、描いている途中の絵が見えてしまうと
ひとつのキャラクターが1秒間に数十回の頻度で
見えたり見えなかったりするわけです。
これがチラつきの原因です。
では、これを解決するためにはどうしたら良いのでしょうか?
簡単です。
全ての絵が描き終わってから画面に表示すればいいのです。
これを実現するためには、まず、裏の画面というのを作ります。
裏の画面はプレイヤーからは全く見えません。
プログラムは、裏の画面を対象に絵を描きます。
背景やプレイヤーキャラや敵キャラなどは全て裏の画面に描きます。
そして、全ての絵が描き終わった段階で、
裏の画面をテレビの画面に表示すれば良いのです。
そうすると、描いている途中の絵は全て裏の画面で見えなくなりますので
プレイヤーは完成した絵しか見ることはありません。
…と、まぁ、文章で説明するとわかりにくいと思いますので、
今回も図解を用意いたしました。
当ブログの記事をご覧ください。
http://www.game-create.com/contents/game_programming/how_do_game_drive
「このページ読んだことあるよ」と思われた方ももう一度ご覧ください。
図を足してあります。
さて、長くなってしまいましたが、
今回は次のことを知っていただければ十分です。
・ゲームは裏の画面に描いて、全て描き終わったら表の画面に表示する。
これだけ覚えていただければ、あとは忘れてしまっても問題ありません。
また、必要なときにこのメルマガを参照いただければ良いと思います。
ここまできてようやっとゲーム画面を構築する準備ができました。
来週からは、また具体的なゲームを作っていきたいと思います。
題材はいろいろ考えたのですが「地球防衛ゲーム」にすることにしました。
果たしてどんなゲームになるのでしょうか?
お楽しみにお待ちください。
今回も最後まで読んでいただいてありがとうございます!
それでは!
Byerkut.
┌┬───────────────────────────────┬┐
││ 考えようによっては、ためになるコラム ││
││ ││
││ 【表の画面と裏の画面が大事な理由】 ││
└┴───────────────────────────────┴┘
今回、わざわざ時間を掛けてアニメの仕組みの話から
表の画面と裏の画面をお伝えしたのには理由があります。
実は、新しい技術でゲームを作る場合、
最初に調べるのが「画面を更新する方法」だからです。
(私だけかもしれませんが)
「画面を更新する」とは、今回のメルマガのメインテーマとなっている、
「裏の画面に描いて、描き終わったら表の画面に表示する」という
一連の動作のことを指します。
たとえば、少し前に RPG ツクール VX を購入したのですが、
最初に調べたことが、やはり「画面を更新する方法」でした。
今なら RPG ツクールでシューティングゲームが作れると思います。
また、数年前の話になりますが、初めて Flash でゲームを作った際も
一番最初に「画面を更新する方法」を調べました。
画面を更新する方法と、絵を表示する方法がわかれば、
かなりいろんなゲームを作ることができるようになるからです。
みなさまにおかれましても、何か新しい技術を使ってゲームを作る際には、
「画面を更新する方法」から入っていくことをおすすめします。
Byerkut.
┌┬───────────────────────────────┬┐
││ 重要記事のダイジェスト ││
└┴───────────────────────────────┴┘
■C++ は計算と記憶しかできない
■外部の機能(関数)を借り受けるには #include を使う
■#include で借り受けた機能を使うには関数を呼び出す
http://archive.mag2.com/0000240151/20080203171350000.html
■Windows プログラムには必ず WinMain() 関数から開始する
http://archive.mag2.com/0000240151/20080209215231000.html
■プログラムは関数の集まり
■プログラムは関数を増やしてソフトウェアを作る
■関数には次の要素がある(名前・機能・引数・戻り値)
http://archive.mag2.com/0000240151/20080216090000000.html
■ゲームを作るためには「入力」「出力」「条件分岐」が必要
http://archive.mag2.com/0000240151/20080301221623000.html
■LoadImage() 関数はコピペで使い回せる。
■LoadImage() 関数の第2引数は
メモリに読み込みたい画像ファイルの名前を渡す。
■LoadImage() 関数で読み込むファイルは
プロジェクトディレクトリにおいてある必要がある。
http://archive.mag2.com/0000240151/20080413174135000.html
┌┬─────┬─────────────────────────┬┐
││ あとがき │ 発行者のつぶやきです ││
└┴─────┴─────────────────────────┴┘
モンハン。寝る前にプレイしておりますよ。
アクションゲームが苦手なので、
やっと一番簡単なレベルの敵キャラが倒せるようになりました。
トカゲとかサルとか狩りまくりです。
狩りってたのしー!
┌┬───────────────────────────────┬┐
├┘ └┤
│ 購読の解除はこちら↓ │
│ http://www.game-create.com/contents/gp_beginners_ml │
├┐ ┌┤
└┴───────────────────────────────┴┘
- Ads space -
┌┬───────────────────────────────┬┐
├┘ └┤
│ 「挫折不可能!初級ゲームプログラミング完全マニュアル」は、 │
│ 「いちばんやさしいゲームの作り方」が運営しています。 │
│ │
│ サイト : http://www.game-create.com/ │
│ 発行元 : http://www.game-create.com/menu/about │
│ 発行者 : http://www.game-create.com/menu/profile │
│ 問い合わせ : http://www.game-create.com/menu/contact │
│ 利用規約 : http://www.game-create.com/informations/agreement │
├┐ ┌┤
└┴───────────────────────────────┴┘
POWERED BY LIBERTIASTER GAME STYLE.


