2Dプラットフォーマーの「時間制御」


9

プレイヤーがボタンを押してレベルを再開できる2Dプラットフォーマーを作成しています。前のキャラクターだけが同時にレベルを実行します。

他のゲームが以前にこれを行ったことを知っています。私が考えた方法は、ゲームキャラクターに一連のアクション(アイドル、ジャンプ、左歩くなど)を持たせ、それらのアクションの変化を検出してログインすることですゲーム時間と一緒のリスト。そのため、キャラクターが自分でレベルを再度実行する必要がある場合、適切なタイミングでアクションを変更してリストを確認できます。

これはそれを行うための最良の方法ですか?誰かこれについて何か経験がありますか?

ありがとう。


あなたが探しているのは、時間コントロールというよりも「リプレイ」です。あなたはこれに対処する方法についていくつかの素晴らしい記事を見つけるかもしれませんが、私はまだ以下の答えがこの分野での良いスタートでもあると言います。ゲームで「ランダム」なものは、進行に影響を与える可能性がある場合、それを実行している「ゴースト」キャラクターのリプレイを台無しにすることに注意してください。
James

3
「ランダム」パーツの良い点。シードに基づいて番号を生成するランダムジェネレーターを使用してください。次に、再生時にシードを保存し、その再生を再生するときに同じシードを使用します。
bummzack

どうやってやったの?あなたの回避策は何ですか?

回答:


8

編集:

この質問に対する@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つのモードがあります。

  1. 記録:キーボード入力を受け取ります。リストに入力を記録します。キーボードの状態に基づいて文字入力を渡します。
  2. 再生:キーボード入力を無視します。レベルが開始してから経過したミリ秒に応じてリストを進めます。現在の記録されたキーボードの状態に基づいて文字入力を渡します。

キャラクター

Characterオブジェクトが作成されると、それ自体が新しいコントローラーを作成します。キャラクターはいつでも次の2つのモードのいずれかになります。

  1. アクティブ:アクティブなキャラクターは1つだけで、あなたがコントロールするキャラクターです。キャラクターがアクティブモードの場合、コントローラーは記録モードになります。デフォルトでは、キャラクターが作成されると、アクティブモードになります。
  2. ゴースト:これはあなたの過去の行動を再現するものです。キャラクターがゴーストモードに入ると、その外観が変わり、コントローラーが再生モードに設定されます。

レベル

新たに始まったレベル

レベルを開始するときに、単一のキャラクターを作成します。今度はレベルが始まり、プレーヤーは彼のことをします。

時間がリセットされたとき

レベルがリセットされたら、次の3つのことを行います。

  1. 現在のアクティブキャラクターにゴーストモードに入るように伝えます。
  2. 新しいキャラクターを作成します。
  3. すべてのキャラクターを呼び出してリセットします。これにより、動きのない開始位置に戻ります。キーが押されていない状態で、ミリ秒0にリセットするようにコントローラーに指示します。

その後、レベルが始まり、プレイヤーは自分のことを行います。


これは完全に明らかです。どうもありがとう。ちょっと正しい考えはありましたが、動きを記録するための中央システムを作成するつもりでしたが、各キャラクターに独自の動きを記録させる方がはるかに簡単です。ありがとう。
Woody Zantzinger、2011年

8

記録された入力を再生する場合は、アクションが再生されたときに移動または状態が変更された可能性のある、移動中/破壊可能/インタラクティブなオブジェクトの影響を考慮してください。

また、ゲームで可変タイムステップを使用している場合、入力の再生は正確に機能しません。(可変フレームレートレンダリングの補間を使用した)固定タイムステップのゲームアップデートを検討したい場合がありますか?


1
できれば+10。大きな考慮事項。目的の効果によっては、動きベクトルまたは位置のいずれかを再生する方が、入力を再生するよりも優れています。フレーム間の数十ミリ秒の不正確さは、入力や移動よりも、動きや位置を操作する方が簡単に説明できます。
doppelgreener


0

キーボード入力を記録することは、あなたのケースではそれほど役に立たないかもしれません。ただし、タイムラインを使用してスプラインを生成できます。適用する必要のある力でトリッキーな場合は、時間を巻き戻すこともできます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.