Easy3D関連ネタ/リプレイの作成

Last-modified: 2009-11-08 (日) 04:15:38

リプレイの作成法には、いくつか手法がある。

まず、公式の「HSPで3D格ゲーを作ろう」によると、

  • 全てのフレームの情報を記憶して、それを加工しながら再生するという方法
  • 変化があった事柄だけを記録し、記録されたデータを補間しながら、再生するという方法

があり、両者の特徴としては、

  • 前者は、シーンを忠実に再現できることや、プログラムが簡単なもので済むという点で、優れている。
    しかし、記録用のデータが、大きくなり、長時間のシーンのリプレイには、向いていないという欠点もあり。
  • 後者は、記録用のデータが少なくて済む、という点で優れているが、補間計算が必要で、プログラムが複雑になるという欠点がある。

さらに、この手法を細分化するといくつかの方法があるので、記録しておく。

 

すべてのフレームの情報を記憶して、それを加工しながら再生する場合

キャラクターに関するすべての情報を保存する方法

まず、キャラクターの情報を(配列にしておいてある場合が多いと思うが)を、
すべて保存しておく形式。公式の格闘ゲームサンプルもこの手法。

dim replayinfo, INFO_MAX, REPLAY_FRAMENUM, 2

という部分を見ると分かりやすい。
replayinfoは、キャラクターの情報全部(INFO_MAX)を、リプレイに要するフレーム分(REPLAY_FRAMENUM)格納する配列ですよということ。最後の2は、キャラが2人分ということ。

キャラの姿勢、モーションなどすべてを格納してしまう。
リプレイのときは、これらをロードして、再生してやればOK
わかりやすさと再現度の高さでは、これが一番優れているだろう。

キャラクターのキー入力をすべて保存しておく方法

格闘ゲームなどは、キー入力でキャラが動くようになっているから、
このキー入力を保存しておくという方法も有効

具体的には、

dim replayinfo, REPLAY_FRAMENUM, CHAR_NUM

のようになる。
replayinfoには、E3DGetKeyBoard系の命令で取得したキーボード番号を格納しておく。
そして、メイン画面中は、ユーザーからの入力によってキャラが動くが、
リプレイ中では、replayinfoからデータを引っ張って、オート再生すればOK
ポイントは、NPCも、ちゃんとキー入力で動くシステムにしておくこと(たいていはそうなっていると思う)。
この方法は、メイン部分をほとんどいじらず再現できる上、保存する情報も少なくて済む。