編集:
この質問に対する@Bluescrnの回答を参照してください。彼は、動きベクトルや位置ではなく、コントロールの再生の弱点について詳しく説明します。
-
あなたは正しい軌道に乗っています。これが私が使うアプローチです:
コントローラー
キーボード入力を受け取り、それをキャラクターに渡すControllerクラスを作成します。ただし、重要なキー(矢印、ジャンプなど)が押されたとき、およびそれらが離されたときの正確なコントローラーレコードもあります。次のような情報が保存されます。
actions[0].milliseconds = 400 actions[0].action = right pressed
actions[1].milliseconds = 1000 actions[1].action = jump pressed
actions[2].milliseconds = 1300 actions[2].action = jump released
actions[3].milliseconds = 2500 actions[3].action = jump pressed
actions[4].milliseconds = 3000 actions[4].action = jump released
actions[5].milliseconds = 5330 actions[5].action = right released
コントローラには2つのモードがあります。
- 記録:キーボード入力を受け取ります。リストに入力を記録します。キーボードの状態に基づいて文字入力を渡します。
- 再生:キーボード入力を無視します。レベルが開始してから経過したミリ秒に応じてリストを進めます。現在の記録されたキーボードの状態に基づいて文字入力を渡します。
キャラクター
Characterオブジェクトが作成されると、それ自体が新しいコントローラーを作成します。キャラクターはいつでも次の2つのモードのいずれかになります。
- アクティブ:アクティブなキャラクターは1つだけで、あなたがコントロールするキャラクターです。キャラクターがアクティブモードの場合、コントローラーは記録モードになります。デフォルトでは、キャラクターが作成されると、アクティブモードになります。
- ゴースト:これはあなたの過去の行動を再現するものです。キャラクターがゴーストモードに入ると、その外観が変わり、コントローラーが再生モードに設定されます。
レベル
新たに始まったレベル
レベルを開始するときに、単一のキャラクターを作成します。今度はレベルが始まり、プレーヤーは彼のことをします。
時間がリセットされたとき
レベルがリセットされたら、次の3つのことを行います。
- 現在のアクティブキャラクターにゴーストモードに入るように伝えます。
- 新しいキャラクターを作成します。
- すべてのキャラクターを呼び出してリセットします。これにより、動きのない開始位置に戻ります。キーが押されていない状態で、ミリ秒0にリセットするようにコントローラーに指示します。
その後、レベルが始まり、プレイヤーは自分のことを行います。