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