重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

市販ゲームなどにリプレイ機能が付いているのをよく見るのですが、
あれの実現方法について考えてみました。

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

ふと市販のゲームのリプレイを観ていて考えたのですが
何を言っているのか良く分からなかったらすみません。。

A 回答 (5件)

4です。


3000個は300個、180000個は18000個の間違いです。
    • good
    • 0
この回答へのお礼

大変分かりやすかったです。
実際の3Dレースゲームなどはこれに加速度や初速度(その時点でのkm速さ)が
加わるのでしょうが大体そんな感じかもしれませんね。

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

ありがとうございました!

お礼日時:2008/01/15 23:01

簡単な考え方をひとつ紹介します。



(1)アクセル、ブレーキ、ハンドルの3つの現在位置情報を数値化します。

 ○条件
  ・分解能を100(00~99)とします。
  ・アクセルとブレーキは離した状態が00、目一杯踏んだ状態が99とします。
  ・ハンドルは中立位置を49、左一杯に切った状態を00とします。

 ○設定
  現在位置を数値化し記録します。
  ・アクセル:33(3分の1くらい踏んでる)
  ・ブレーキ:00(離してる)
  ・ハンドル:52(ちょっと右に切ってる)

(2)上記データを1秒間に100回記録します。

要は運転を記録して、全く同じ運転をさせるということです。
上記例では1秒間で2桁の数字を3000個、1分間で180000個しか記録しないので、大した情報量になりません。

敵の車の運転状態も同様記録できるでしょう。

3様の回答にあるように乱数記録の方法もあります。

リッジレーサーやグランツーリスモなどがどういった記録方式を取っているのかわかりませんが、私が作るとしたらこんな感じです。
    • good
    • 0

> 仮にランダム性のあるゲームだと


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

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

乱数をドミノのように最初に設定した値からプログラム実行中は全て派生できる
ようなアルゴリズムで無いと出来ないのでやや限定的かもしれませが・・・。

お礼日時:2008/01/15 22:52

> 膨大なテキスト量になってしまわないでしょうか・・?



それはなるでしょう。
しかし、画像に比べたら遥かに小さいし、コマンドを
バイナリにしてもいいですが、最近のPCの能力では
人が目で見た時に、バイナリでは見にくいのでテキス
トで持ってしまうのが一般だと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/15 22:44

ゲームの動きをコマンド化し、コマンドのログを取る


という考えがすっきりします。

例えば、敵の車の動きがランダムなのであれば、ラン
ダムな数値を得た後に、
(動作 敵の車、現在位置、次ランダムで得た数値)
といったようなコマンドを作り、そのコマンドを受け
たらゲームが進むように作るわけですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/14 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!