リプレイクラス

すんげー難しいと思っていたのですが、
やってみたら意外に簡単でした。
 
なんというか、自分のプレイが1つ1つ再生されるのは、
ちょっとした感動モノでした。
 
で、やり方です。
 
とりあえずクラス図を、、(´∀`;
http://www5.atwiki.jp/yaruhara/?plugin=ref&page=kenmo&file=keybuffer.png
ゲームにおいて、キーの入力判定として必要なのはたいてい、

  1. そのキーを押しているか?(Press)
  2. そのキーがそのフレーム内に押されたか?(Push)
  3. そのキーがそのフレーム内に離されたか?(Release)

の3つの情報です。
これらの情報は、KeyBufferクラスに格納します。
 
1についてはそのフレームだけで判定できるのですが、
2、3については、前フレームの入力情報が必要になります。
 
なので、キー情報の作成の際には、前フレームの入力情報を渡してやります。
 
 
そして、KeyBufferManagerは、
毎フレームごとに、KeyBufferクラスをリストに追加していきます。
 
これがリプレイデータ作成のミソです。
 
そして、リプレイ情報を保存する場合、
KeyBufferクラスのリストをファイルにダンプし、
リプレイを再生する場合は、そのファイルを読み込み、
KeyBufferクラスのリストを再構築します。
そして、リストを先頭から実行すれば、リプレイデータが再生されます。
 
Pythonの場合、オブジェクトを丸々ダンプするという、
素晴らしい機能が標準ライブラリ(cPickleモジュール)に用意されているので、
KeyBufferManagerを丸々ダンプするだけでOKです。
 
それ以外の言語では、なんらか方法で、
KeyBufferクラスのリストをバイナリかテキストのデータに落とし込む必要がありますねー。
 
ちなみにPythonで2分ほどのリプレイデータをダンプしたら、1.4Mbほどあったので、
長いデータは、バイナリに落とし込む処理を考えた方がいいと思います。