0

単純な「ステップ ベース」のグラフィカル エンジンでは、オブジェクトの動きが直接フレーム レートに結び付けられます。これは、ハードウェアが同一であった 1980 年代には問題ありませんでした。

何年もの間、エンジンは d=s/t の「時間ベース」でした。これは、コンピュータのフレーム レートやパワーに関係なく、オブジェクトが A から B に移動するのに同じ時間がかかることを意味します。

すべてが時間ベースである場合、NPC に攻撃されたときにキャラクターのヒット ポイントが x ずつ減少するようなアクションをどのように実行できますか? 「ヒット」は 5 秒ごとです。

私が知る限り、この 5 秒の遅延は「ハートビート」と呼ばれます。多くの MMO は、多くのアクションに対してグローバルなこのようなハートビートを使用します。

「ハートビート」は、時間ベースのエンジンで線形でないイベントに使用する最良の方法ですか?

アップデート:

詳細なご回答ありがとうございます。可能であれば、明確にしようと思います。MMO サーバーが制御する世界を内部的にシミュレートするために使用するオプションを決定しようとしています。

私が理解しているように、オブジェクトを変更するシステムには 3 つの主な「刺激」があります。 :これらはサーバー内部のみです。

  1. 線形統合操作。これらはゲームループ内で行われます。たとえば、A から B への NPC の移動。

  2. クライアント イベント。サーバーに関する限り、これらは一見ランダムな時間に発生します。たとえば、ユーザーが発砲をクリックします。

  3. 時間ベース。これらはハートビート間隔で発生します。たとえば、アイドル状態の NPC をチェックして、何かすることを与えます。

ステップ 3 は、私が取り組んでいるもので、この方法が正しいかどうかを明確にするために探しています。これで私の質問が明確になることを願っています。

4

1 に答える 1

1

あいまいなため、現在の文言では質問が少し難しいです。回答は、ゲーム ループ、ネットワーク サーバー アーキテクチャ、ネットワーク クライアント アーキテクチャ、ゲーム ロジックなどに関連している可能性があります。

しかし、これらすべてを無視して、最後の質問に答えようとします。

「ハートビート」は、時間ベースのエンジンで線形でないイベントに使用する最良の方法ですか?

ある種の「ハートビート」は、時間ベースのシステムを実装できる最低レベルの方法です。しかし、特定のシステムやゲームの要件を知らなければ、それで十分だとは言えません。

ハートビートの構築

あなたが言ったように、コンピューターシステムのリアルタイムの性質(1秒あたりの正確なクロックサイクル数、各命令の正確なクロックサイクル数、実行中のプログラムのみ、ハードウェア割り込みなしなど)に頼ることができなければ、タイミングこのハートビートを生成することは、非常に複雑になる可能性があります。また、システム タイマーやハードウェア タイマー、または「スレッド スリープ」コマンドに依存して、安定したハートビートを実装することもできません。 別の見方をする場合は、Win32 のタイミングに関するこの記事を参照してください:)

もう少し柔軟になり、心拍数をより安定させる方法については、こちらの人気記事をご覧ください。この記事では、時間の「アキュムレータ」を構築し、十分な時間が蓄積されたら更新/コールバック関数を起動する方法について説明しています。これはゲーム ループが物理演算の更新をトリガーすることについて話していますが、最終的にはゲーム ハートビートもゲーム ループから発生する必要があります。

ハートビートをどうするか

ハートビートが安定したら、その上にゲーム ロジックを実装するのは面倒です。Quake 1 のようなゲームでは、10 ミリ秒ごとにコールバックされるオブジェクトごとに "考える" 関数を使用することは問題なく機能しますが、より多くのオブジェクトを含む大規模なゲーム (MMO など) では、すぐに扱いにくくなります。

これの上に構築できる高レベルのメカニズムは、「タイマー」または「ストップウォッチ」であり、タイマーが経過するとカスタムのタイマーごとのコールバック関数を呼び出すか、定期的に (たとえば 5 秒ごとに) 呼び出します。このようにして、一般的な方法でタイム チェック (「まだ 5 秒ですか?」) を実行し、ゲーム ロジックに必要なものだけを実装させることができます。

ネットワークプログラミング

MMO のようなネットワーク ゲームは、これよりも複雑になります。あなたは MMO について言及しましたが、ネットワーク遅延、損失性、クライアント/サーバー同期の問題などについては言及していませんでした。そのため、ここでは詳しく説明しません。これらの質問に適切に答えると、本ではないにしても、おそらく大きな記事がいっぱいになるので、これは便利です.

于 2011-08-15T21:22:17.273 に答える