タグ付けされた質問 「game-loop」

実行中のゲームプレイを処理する中心的なコードループ。最も基本的な状態では、入力を受け入れ、エンティティのアクションを解決し、シーンをレンダリングします。

4
更新にターンベース(RPG)ゲームでアイドル時間を使用する
ターンベースのRPGゲームを実行すると、ゲームが「wait_for_player_input」をループしているため、何も起こらない時間が長くなります。当然、この時間を使用して更新するのが賢明なようです。 ただし、これはすぐにスレッド化する必要があることを示唆しているようです。この種の設計は単一のスレッドで可能ですか? loop: if not check_something_pressed: update_a_very_small_amount else keep going しかし、「a_very_small_amount」がループごとに1つのオブジェクトのみを更新していると言うと、更新が非常に遅くなります。 あなたはこれについて、できればシングルスレッドでどうしますか? 編集:私はこの言語にとらわれないタグを付けました。;-) 2番目の編集:このゲームでは、アニメーションコンポーネントを使用する予定はありません。つまり、私は現在、プレイヤー入力待ちとして実行しており、すべてを更新して描画しています。したがって、X FPSではなく、ユーザーの速度に依存します。

1
City-simはどのようにして数百のキャラクターをシミュレートできますか?
私のゲームは通常、可能なキャラクターを表す数百のボックスがあると、非常に簡単に遅れを始めます。SimCityやAnnoのようなゲームにも数百のキャラクターがあります。 それらのゲームはすべてのチックですべてを更新するわけではなく、ニーズは間隔で処理され、それはレンダリングの問題ではないことに気付きましたが、これらの小さな生き物はすべて個別のパスファインディングなど を持っています。古いマシンでも、何千もの文字をオフにします。彼らはこれをどのように行うのですか? この質問は、個人が実際には数えず、没頭と美学のために単にシミュレートされる巨大な数を参照するように更新されました。 (個別のキャラクターを参照している場合に関連:Dwarf Fortressは、パフォーマンスを失うことなく、非常に多くのエンティティを追跡する方法を教えてください。) (別の質問ですが、おそらく関連していますか?:Unity3Dで何百ものアニメ化されたキャラクターをレンダリングする)

2
サーバー側ゲームループ
多くのJavaゲームでは、fpsを制御するためにthread.sleep()を使用しています。サーバーはグラフィックを表示しないので、サーバーのゲームループはデルタ時間を計算するだけで実行し続ける必要がありますか?この例のように: long lastLoopTime = System.nanoTime(); final int TARGET_FPS = 60; final long OPTIMAL_TIME = 1000000000 / TARGET_FPS; while (gameRunning) { long now = System.nanoTime(); long updateLength = now - lastLoopTime; lastLoopTime = now; double delta = updateLength / ((double)OPTIMAL_TIME); doGameUpdates(delta); }

2
マルチスレッドゲーム-更新、レンダリング、およびそれらを分割する方法
StackOverflow投稿から(これを移動することをお勧めしました): それで、私はゲームエンジンに取り組んでいて、かなり良い進歩を遂げました。ただし、私のエンジンはシングルスレッドであり、更新とレンダリングを別々のスレッドに分割することの利点は非常に良い考えのように思えます。 どうすればよいですか?シングルスレッドのゲームエンジンは(概念的には)作成が非常に簡単で、更新->レンダリング->スリープ->繰り返すというループがあります。ただし、特に更新レートを変更した場合(たとえば、更新ループを25秒に1回実行し、レンダリングに60fpsを使用している場合)は、更新とレンダリングを分解する適切な方法を考えることができません-途中で更新を開始するとどうなりますか?レンダーループを介して、またはその逆?

3
XNAゲームループの更新と描画
ゲームのメソッドがどのように呼び出され、いつ呼び出されるかについて混乱しています。 だから私はシーケンスが次のとおりであることを読みました: 初期化 LoadContent 更新 ドロー UnloadContent ここで、3と4はゲームループです。したがって、after Updateが呼び出さDrawれ、次にが呼び出され、次にUpdate、then Draw、then 、... ゲームループ(更新と描画)は1秒あたり60回実行されます。 そして、私はそれを別の場所に読みUpdateとDraw異なる時間に呼び出すことができ、Update1時間前にもっとして呼び出すことができDraw等々 。 ...そして最後に、メソッドがUnloadContent呼び出された後に呼び出されます。UpdateExit
7 xna  game-loop 


2
3Dグラフィックスでの描画および更新の順序
私が見てきたすべてのコードサンプルでは、​​ゲームループは次のようになります。 while(true) { InputAndUpdate(); Draw(); SwapBuffers(); } しかし、これはCPUとGPU間の並列性を破壊しませんか?スワップバッファが呼び出された後、CPUが入力を処理して更新している間、GPUは空の状態で待機します。次に、CPUが描画コマンドの発行を完了すると、GPUのレンダリングが完了するまで待機します。なぜこうならないのですか?: while(true) { Draw(); //First issue the draw commands InputAndUpdate(); //Update while the GPU is busy rendering SwapBuffers(); //Now block and wait for the GPU to finish }

2
プラットフォーマーゲームループでの操作の正しい順序
ロックマンエンジンで問題が発生しました。ゲームループの構造により、修正が非常に困難になっています。Rush Jet、または落下するプラットフォームでは、ロックマンは落下してもプラットフォームに接続されたままでいる必要があります。現在、私ができる最善の方法(彼を引き寄せる魔法の力場のような回避策に頼ることなく)は、プラットフォームが最初に落ち始めたときに彼が1フレーム落ちるようにすることです。しかし、これでも、衝突チェック中に落下プラットフォームが彼を引き下げる必要があります。この追加のステップがなければ、プラットフォームが下降するとき、彼は常に「揺らぎ」ます。 ゲームループ内のイベントの順序がこれを実現しています。こんなふうになります: ロックマンとラッシュジェットがしばらく水平に飛んでいます。 思考フェーズ:プレーヤーが押し下げる-プラットフォームは速度を下向きに設定することを決定します。 アクションフェーズ:プラットフォームが下に移動します。プレーヤーはこれを認識していません。 反応フェーズ:2つは衝突していないため、「拘束力」チェックは行われません。 次のフレームでは、ロックマンが落ちます。1フレーム後、重力が追いつき、再びプラットフォームに着地し、y速度を0にリセットします。 ループの基本的な順序がわかります。 前のフレームからの衝突やその他の変数を分析して、状態遷移やその他の調整を決定する思考フェーズ。 アクションフェーズ-全員が速度に従って移動します。 反応フェーズ-衝突チェック、位置を調整して修正します。これは、プラットフォームの移動などのエフェクトも処理します。プレーヤーをある程度押します。彼の速度の変更は、アクションフェーズの次のフレームで適用されます。 私はこれらの手順と他のさまざまな変更を並べ替えてみましたが、すべてのバグがあり、すべてが全体をさらに悪化させています。これらのことを正しくするためにエンジンに大幅な変更を加える必要がある場合は、時間を無駄にする前に、「適切な」方法が何かを知りたいと思います。 私が考えられる解決策の1つは、前のフレームでプラットフォームに触れていた人を見て、その人を引き寄せて実際に一緒に移動するという動きのステップになることを知っています。しかし、それは複雑すぎるようで、そのようなコンポーネント間で到達します。私のエンジンコードは、元のゲームよりもずっと複雑に感じられ、何か間違っていることを示唆しています。 それで、イベントの適切なシーケンスはありますか?プラットフォームに沿って物事を移動することについてここで別の質問がありますが、それは私の問題の原因となるイベントの問題の順序には対応していません。また、クラシックロックマンのゲームのやり方を実際に知っている人がいれば、それは大きな助けになります。 https://github.com/Tesserex/C--MegaMan-Engine/tree/master/Mega%20Manで、必要なだけ私のコードを見つけてください。CollisionComponentとMovementComponentが最も便利です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.