• ベストアンサー

リプレイ機能の実現について

市販ゲームなどにリプレイ機能が付いているのをよく見るのですが、 あれの実現方法について考えてみました。 リッジレーサーやグランツーリスモ、東方などのリプレイ機能のアルゴリズムは 敵や車の動きからランダム性を完全に排除することでユーザーのキーの入力のみ をリアルタイムにセーブしてリプレイ時に同じ動きを同じ条件で毎回再現 しているのではと思ったのですが、仮にランダム性のあるゲームだと リプレイ機能は動画のキャプチャでもしない限り実現は難しいのでしょうか? ふと市販のゲームのリプレイを観ていて考えたのですが 何を言っているのか良く分からなかったらすみません。。

質問者が選んだベストアンサー

  • ベストアンサー
  • club7hiro
  • ベストアンサー率50% (17/34)
回答No.5

4です。 3000個は300個、180000個は18000個の間違いです。

noname#88356
質問者

お礼

大変分かりやすかったです。 実際の3Dレースゲームなどはこれに加速度や初速度(その時点でのkm速さ)が 加わるのでしょうが大体そんな感じかもしれませんね。 ちょっと考えてみたのですがそのやり方だとリプレイ時の再現における初期の僅かなズレが後々散大していくと思われるので少し改良して、 ハンドルの角度、アクセルボタンを押しているか押していないかを たとえば1秒の内59/60はこの方式で記録し、1/60ごとに 加速度、初速度、3D座標を記録してリプレイ時にフレームのズレを定期的に 修正するような形でやると情報量を抑えた完璧な再現が出来そうですね。 ありがとうございました!

その他の回答 (4)

  • club7hiro
  • ベストアンサー率50% (17/34)
回答No.4

簡単な考え方をひとつ紹介します。 (1)アクセル、ブレーキ、ハンドルの3つの現在位置情報を数値化します。  ○条件   ・分解能を100(00~99)とします。   ・アクセルとブレーキは離した状態が00、目一杯踏んだ状態が99とします。   ・ハンドルは中立位置を49、左一杯に切った状態を00とします。  ○設定   現在位置を数値化し記録します。   ・アクセル:33(3分の1くらい踏んでる)   ・ブレーキ:00(離してる)   ・ハンドル:52(ちょっと右に切ってる) (2)上記データを1秒間に100回記録します。 要は運転を記録して、全く同じ運転をさせるということです。 上記例では1秒間で2桁の数字を3000個、1分間で180000個しか記録しないので、大した情報量になりません。 敵の車の運転状態も同様記録できるでしょう。 3様の回答にあるように乱数記録の方法もあります。 リッジレーサーやグランツーリスモなどがどういった記録方式を取っているのかわかりませんが、私が作るとしたらこんな感じです。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> 仮にランダム性のあるゲームだと > リプレイ機能は動画のキャプチャでもしない限り実現は難しいのでしょうか? コンピュータ上で使用される疑似乱数では 最初に与える乱数の種によってその後得られる乱数列が決まります。 コンピュータゲームでのランダム性は疑似乱数を用いて 実現しているわけですから、 乱数の種を保存してリプレイ時に使用すれば 同じ乱数列を得て同じ状況を再現することができます。

noname#88356
質問者

お礼

そういえばこれは乱数のアルゴリズムによるのかもしれませんが、 SFCのドラクエ5のカジノのポーカーやエンカウントなどは乱数が 時間から得られているのでエミュレーターで直前のセーブデータを クイックセーブしておけば何度ロードしなおしても同じ結果にしかならない とかありましたね。そういう性質を利用したらリプレイに使えるかもしれないですね。。 乱数をドミノのように最初に設定した値からプログラム実行中は全て派生できる ようなアルゴリズムで無いと出来ないのでやや限定的かもしれませが・・・。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

> 膨大なテキスト量になってしまわないでしょうか・・? それはなるでしょう。 しかし、画像に比べたら遥かに小さいし、コマンドを バイナリにしてもいいですが、最近のPCの能力では 人が目で見た時に、バイナリでは見にくいのでテキス トで持ってしまうのが一般だと思います。

noname#88356
質問者

お礼

なるほど。。確かにそうですね。大変参考になりました。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

ゲームの動きをコマンド化し、コマンドのログを取る という考えがすっきりします。 例えば、敵の車の動きがランダムなのであれば、ラン ダムな数値を得た後に、 (動作 敵の車、現在位置、次ランダムで得た数値) といったようなコマンドを作り、そのコマンドを受け たらゲームが進むように作るわけですね。

noname#88356
質問者

お礼

回答ありがとうございます。 その方法も考えてみたのですが、そのやり方で1フレームごとに座標を 保存するとしたら3Dのレースゲームとかだと情報量も多いため 膨大なテキスト量になってしまわないでしょうか・・?

関連するQ&A