N-EMU · レトロゲームエミュレーターv1.10.1
開発の話投稿日 thorv1.3.0

ランアヘッドでボタンの反応を早める

ゲームはボタンを読んでから1フレーム以上たって結果を画面に描きます。ランアヘッドはそのフレームを先に動かして反応を早め、計算が増える分バッテリーを多く使います。

クローズドベータテスト

ゲームはボタンを読んでから1フレーム以上たって結果を画面に描きます。エミュレーターでは表示と入力処理の遅れがさらに加わるため、押したあとの反応が遅く感じられることがあります。

ランアヘッドは、ゲームが遅れて描くフレームを先に動かしておく方法です。表示するフレームごとにゲームを1フレーム進め、その状態を覚えておきます。次に決めた数だけさらに動かして先の画面を表示し、覚えた状態に戻ります。押した結果はその分早く見え、ゲームは相変わらず1フレームずつ進みます。

音と振動は最後に表示するフレームのものだけを使い、表示しないフレームのものは捨てます。先に進めた内容がゲーム内セーブに残らないよう、mGBAはステートセーブに含まれないカートリッジのセーブメモリも別にコピーして一緒に戻します。巻き戻しの履歴とステートセーブには、先に進める前に保持した状態だけが残ります。

代わりに計算量が増えます。表示するフレームごとに決めた数より1フレーム多く動かし、状態の保存と読み込みも毎回行います。そのため既定ではオフで、1×のときだけ動作します。早送り中は反応を早める理由がないからです。

先に動かせるフレーム数は機種ごとに決めました。多くは2フレームまでで、スーパーファミコンとメガドライブは実機でコストを測るまで1フレームに制限しました。ニンテンドーDSとPSPはステートセーブが数MiBから数十MiBあり、PSPのコアは先に動かすフレームでもグラフィックス処理が必要なため対象外にしました。

作業中に別の問題も見つかりました。aresで動かす6機種は、画面の受け渡しが遅れると一度に2フレーム進むことがありました。ランアヘッドは1フレームずつ進んでこそ正しく動くため、画面が届くまで待つように直し、普段のプレイでときどき2フレーム進んでいた問題も一緒になくなりました。

実機でフレーム時間とバッテリーがどれだけ変わるかは、まだ測定していません。

  1. 開発の話v1.2.0クローズドベータテスト

    プレイ中にゲーム内セーブを記録する

    ゲーム内のセーブは、バックグラウンドへの移行時やゲーム終了時にしかファイルへ記録されていませんでした。1.2.0からは、最後の変化から1秒間変わらなければ記録します。

  2. 開発の話v1.2.0クローズドベータテスト

    一時停止画面の繰り返し処理を減らす

    画面が止まっていても描画処理は続くことがあります。1.2.0では再描画が必要な場面を区別し、設定を保存前に試せるようにしました。

一覧に戻る対応機種と機能