動作を軽くするには?

動作を軽くするには? 目次

ゲームの動作を軽くする方法について解説します。

動作の重さ・処理時間を知る

まずは、「今どれだけ重いのか?」、「今どれだけ処理(計算や表示)に時間がかかっているのか?」を知る方法について教えます。

まず、環境設定ファイル「System.ini」を開き「ShowFps=1」か「ShowFps=2」にして、さらにDirectDrawモードで実行する場合は「VSync=0」にして下さい(「ShowFps」、「VSync」についての詳細は「System.ini」の解説をご覧下さい)。
そして、ゲーム画面右下の「FPS○○(□□)」に注目して下さい。
「FPS」(FramePerSecond)とはフレームレートのことで「1秒間に何回画面が更新されるか?」です。
通常は(デフォルトのFPSの設定では)この値が常時60前後であれば正常で、体感速度としても軽いと言えます。
逆にFPSが60を下回っているときは動作が重く、キャラなどの動きもカクカクしてしまいます。
つまり、FPSを見れば、ゲームが重くなっているかどうかを数値で見極めることができるのです。

ただ、これだけではまだ不十分です。
「自分のパソコンで動いても他人のパソコンでどうなるか分からない…」
「状況によっては(例えば「キャラ召喚」を何度も実行されたりで)重くなることがあるかもしれない…」

そんな悩みも、ある程度解決できる方法があります。

先程のFPSの後に表示されている()内の数値に注目して下さい。
実はこれ、ゲームにおける1フレームの処理時間で、「MSPF」(MilliSecondPerFrame)と言います(厳密には最新16フレーム間の平均値です)。
MSPFが高いほど処理速度が遅いことになり、この値が一定値を超えるとFPSが落ち始めます。
通常はMSPFが17以上になるとFPSが落ち始めるでしょう。
つまり、MSPFを見れば、あとどれくらいで動作が重くなるかが分かります。

特にゲームをホームページ等で不特定多数に配布する場合は、FPSが60前後だからといって安心せず、MSPFにも気を配った方が良いです。
貴方のパソコンの性能が高ければ高いほど、MSPFを低く抑えるように心掛けましょう。

このページの先頭へ

動作を軽くする

ここではゲームが重くなる原因になりがちなものを挙げて、それらの対処法を記述します。

● キャラやショットの数が多い
行動や当たり判定等の計算が少ないブロックやアイテムは、数が多くなってもそれほど負担にはなりません。
それに対してキャラやショットは、行動(フロー)や当たり判定等の計算が多く複雑です。
特に3つ以上の勢力を使用する場合、キャラやショットの数を少し増やしただけでも当たり判定の実行回数が飛躍的に増して動作が重くなる可能性があります。
例えば、勢力0のキャラを1体、勢力1のキャラを100体とすると、1フレームにおける当たり判定の実行回数は、「1×100」の100回です。
では、勢力0のキャラを1体、勢力1のキャラを50体、勢力2のキャラを50体とするとどうでしょう…この場合1フレームにおける当たり判定の実行回数は、なんと「1×50 + 1×50 + 50×50」で2600回にも及びます。

このように、同じ101体でも当たり判定の実行回数には雲泥の差があるのです。

ただ、キャラやショットの数が多くても1フレームにおける当たり判定の実行回数を抑えることはできます。
ステージの設定で「画面外ではダメージを受けない」が無効なら、画面内の物体同士でしか当たり判定は実行されないので、一度に画面内に入るキャラやショットの数が多くなり過ぎないようにステージを構成すればいいのです。
ブロックキャラ(ブロック化されたキャラ)に関しては「画面外ではダメージを受けない」が無効でも、常に当たり判定(キャラがブロックに触れたかどうか)が実行されるので要注意です。

また、キャラが多い場合は行動や当たり判定などの計算以上に描画で重くなる可能性があります。
この場合、システムの設定における「キャラの描画タイプ」を「速度重視」にすると改善されるかもしれません。

<対処法>
・ステージの「当たり判定レベル」や「キャラ対ショットの当たり判定精度」を下げる。効果絶大です。
ブロックキャラの数を減らす。(※可能な範囲ではあるが、ブロックで代替すると良いです。)
・一度に画面内に入るキャラやショットが多くなり過ぎないようにする。特に弾幕STGの場合、主人公のショットの数を減らすかショットの速度を速くする(速く画面外に消えるようにする)のが手軽で効果も高い。
・ステージの「自動消滅」で不要な敵を抹消する。
・システムの「キャラの描画タイプ」を「速度重視」にする。
・行動範囲「全範囲」と指定されているキャラを減らす。(※代わりに「範囲かグループが真なら成立」とグループありにチェック入れるとほぼ同様の挙動にできる。)
・判定タイプが「一度範囲かグループが真になると、以後無条件で成立」なら「範囲かグループが真なら成立」に変更する。
・エフェクトの数を減らす。(※エフェクトを使用する際、100%よりも小さい場合は通常より処理が重くなるので、絵を別途用意するのも手です。)

● 画面エフェクトやキャラエフェクト
画面エフェクトは画面全体にエフェクトがかけられるので遅いです。
キャラエフェクトに関してはキャラが大きいほどエフェクト処理も遅くなります。
エフェクトの種類にもよりますが、例えば100倍キャラ2体に対してキャラエフェクトを行うと画面エフェクト以上に遅くなることもあります。

<対処法>
・実行速度が遅いエフェクトから速いエフェクトに変える。ちなみにキャラエフェクトの「点滅」なら、なんと通常の表示よりも速くなります。
・実行時間を短くする。(※実行時間がデフォルトでは10にされやすいので、これを1に変更するだけでも良い。)

● 巨大キャラ、巨大エフェクトが多い(DirectDrawモードのみ)
DirectDrawモードにおける巨大キャラの描画は結構遅いです。
大きければ大きいほど遅く、例えば4倍キャラの描画速度は、通常の大きさのキャラの4倍以上になると思います。
ただ、専用bmpの4倍~100倍キャラで(ビットマップ自体が大きくて)プログラム内部で拡大処理をする必要がない場合はそれほど遅くなりません。
エフェクトの描画に関しても、データベースの設定で「巨大化を許可」にチェックを入れているとプログラム内部で拡大処理されて描画される可能性があり、その場合遅くなります。

Direct3Dモードなら巨大キャラ・巨大エフェクトの描画はそれほど遅くありません。

<対処法>
・キャラを小さくする。
・必要な大きさの専用bmpを用意する。
・エフェクトにおける「巨大化を許可」のチェックを外す。
・Direct3Dモードで実行する。

● 背景の数が多い
一度に多くの背景(色でも画像でも)を描画すると重くなります。
Direct3Dモードなら、実行環境にもよるかもしれませんが背景が小さすぎると遅くなります。
DirectDrawモードなら、背景画像は640×480のサイズが最も描画速度が速く、640×480より縦または横に1ピクセルでも大きいと倍以上遅くなります。
また、背景が小さすぎても遅くなります。
どちらの描画方法にしても32×32のような小さいブロックを背景にする場合、それをタイルのように大量に敷き詰めた背景を別途用意した方が圧倒的に軽くなります。

<対処法>
・一度に表示する背景の数を減らす。
・背景画像を小さくし過ぎない。
・DirectDrawモードなら背景画像を640×480以下のサイズにする。640×480がベスト。

このページの先頭へ



次のトピックへ(パッケージングについて(Enigma Virtual Boxの使い方))

ヘルプ目次へ