画面更新の話

画面は更新され続ける

モニタに表示されているツクールのウインドウは一秒間に何十回も画面を描き直しています。

たとえキャラやウインドウが何も動いていなくても、まったく同じ画面を(名目上は)描き直しています。

ツクールではほとんどの場合1秒間に60回画面を描き直しています。 なぜ60回なのかは、そういう仕様だからです。

120回にすることもできるし30回にすることもできますが、まあ60回くらいがちょうどいいんでしょう、デフォルトは60回です。

なお、この数字は処理の重さによって多少落ちたりすることがあります。

この描き直される画面1コマ分の事を「フレーム」といいます。つまり、「1秒は60フレーム」ということになります。

「いついかなる時も画面を1秒間に60回描き直している」

そして、それと同時にデータも更新しています。

データとは「マップの状態」「キャラたちの位置」「HPやMPなどのパラメータ」その他もろもろです。

つまり1秒間に60回データが更新されている事になります。

ちなみにゲーム実行時にF2ボタンを押すと、ゲームのウインドウの左上に数字が出てきます。

これが「一秒間に何回描き直しているか(fps)」を表す数字です。

正常時は60またはそれに近い数字になりますが、処理が重いと数字が下がる事もあります。

マップ画面の例

さて、今、一面の草むらが表示されていて、キャラが一人だけそこを動き回っているとしましょう。

メニューやメッセージ、テキストは何も出ていないとします。

表示されているのは「草むらのマップタイル」と「キャラ」です。キャラが止まっている時は画面は何も変わりません。

※「マップタイル」はツクール公式の呼び方ですが、「マップチップ」と意味は同じ(?)だと思います。なぜ違う呼び方をするのかよく分かりませんが、ここでは「マップタイル」という呼び方を使います。

動いていなくても画面はつねに描き直されています。

ここで「↓」のキーを押すと、キャラが一歩下に動きます。

必要なら草むらのマップも1マス分だけスクロールします。

この動作は一瞬ですが、ここで何をやっているのかというと

・毎フレーム、つねにキー入力を監視している(1秒間に60回監視)

・キャラの「位置情報」を書き換える(例:下キーが押されていたらY方向の数字を一マス分増やす)

・マップの「位置情報」を書き換える(例:下キーが押されていたらマップ表示の中心位置をY方向に一マス分増やす)

・キャラの「位置情報」、マップの「位置情報」をもとに画面を描き直す

もちろんやっているのはこれだけではありませんが、今の例ではこれが主要な処理です。

そして、これが全てのマップ処理の基礎です。

何度もいうように「描き直す」処理は「位置情報が」変わろうが変わるまいがお構いなしに60フレーム毎回実行しています。

「描き直す」という処理ですが、「キャラがどこからどういう動きをして」という事は全く気にしていません。

あくまで「位置情報」を元に画面に描いているだけです。

「下に動いた」とか「すばやく動いた」とか「そもそも一歩も動いていない」とか関係なく、

今現在の情報を頼りに、そのまま情報どおりに画面を描くことを繰り返しています。

画面効果を自分好みにいじりたいとき、何をすればいいか

画面でアニメ効果などを自作するときも、基本的な流れは上と同じです。

1.毎フレーム、つねに「データ」を監視している

2.条件に応じて「データ」を更新

3.データにしたがって画面の中のものを描き換える(データが更新されなくても描き換える)

1から3まで、それぞれ作る必要があります。

3の描画処理は、ツクールが自動でやってくれる場合もあります。

たとえば、操作キャラの透明度を変える描画処理はデフォルトで備わっています。そのため、2で「操作キャラの透明度」という「データ」(具体的には$game_player.opacity)を書き換えるだけで、操作キャラの画面上の透明度が変わります。

自動でやってくれない(たとえば、完全自作のアイコンやインターフェースをアニメーションさせるとか)ときは、描画処理も自分で作る必要があります。