問題タブ [game-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - XNA4.0でのゲームループの回避
XNA4.0でシンプルな3Dモデルビューアを開発しています。描画機能と更新機能で無限のゲームループを回避する方法はありますか?3Dグラフィックスをレンダリングする必要がありますが、シーンを無限にレンダリングする必要はありません。つまり、シーンを再描画する必要があるのは、それが実際に変わったときだけです。
java - 2DOpenGL-ES2.0ゲームを作成するための基本的な必要最低限の方法で助けを求める
私はJavaコードとXMLレイアウトを使用する多くのAndroidアプリケーションを作成しましたが、OpenGLESは非常に初めてです。私はSwingJavaで、ポンを含むゲームと、中級レベルの2Dプラットフォーマー(マップエディターも使用)をプログラミングしました。私はJavaについて幅広い知識を持っていますが、OpenGLは私が開きたい新しい出入り口です。
オンラインのガイドを使用して、OpenGL ESで簡単なものを作成しました。たとえば、座標を手動でマッピングした立方体(非常に楽しい経験でした)や、画面に三角形を描くことなどです。
私の質問は、OpenGL ESで2Dゲームを作成するにはどうすればよいですか?さて、私が試したものはうまく機能しません。私が描いた画像は一定の縮尺で描かれているため、どのガイドを使用しても、画像は常に途切れ途切れであり、デバッグしているNexusSの適切なサイズではありません。 。
私が学ぶ必要があるのは、OpenGL ESを使用して画像やオブジェクトを画面に描画できるようにすることと、ゲームループを実行する方法を学ぶことです。Androidのゲームループについては調べていませんが、間もなく開始します。私が最初に習得したいのは、画面に鮮明なHD画像を描画することですが、これは私にはうまくいきません。
私が過去に行ったことの例を投稿するように要求された場合は、もちろんそうします。しかし、私はあなたが新たなスタートで私を助けてくれることを望んでいます。ありがとうございました。
TL; DR: OpenGL ESを使用して画面に鮮明なHD、2D画像を描画する方法、およびAndroidでゲームループを設定する方法は?
c# - Rxでのゲームの更新とレンダリングのループ:一貫した状態を確保するには?
私は Reactive Extensions for .NET を初めて使用しましたが、これを使って遊んでいるうちに、従来の update-render パラダイムの代わりにゲームに使用できれば素晴らしいと思いました。すべてのゲーム オブジェクトで Update() を呼び出そうとするのではなく、オブジェクト自体が関心のあるプロパティとイベントをサブスクライブして変更を処理するだけなので、更新が少なくなり、テストが容易になり、クエリがより簡潔になります。
ただし、たとえば、プロパティの値が変更されるとすぐに、サブスクライブされたすべてのクエリもすぐに値を更新する必要があります。依存関係は非常に複雑な場合があり、すべてがレンダリングされると、すべてのオブジェクトが次のフレームのために更新を完了したかどうかわかりません。依存関係は、一部のオブジェクトが互いの変更に基づいて継続的に更新されるようなものでさえあるかもしれません。したがって、ゲームはレンダリング時に一貫性のない状態になる可能性があります。たとえば、移動する複雑なメッシュで、一部のパーツが位置を更新し、他のパーツがまだレンダリングを開始していない場合などです。これは、レンダリングが開始される前に更新フェーズが完全に終了するため、従来の update-render ループでは問題になりませんでした。
それでは、私の質問は次のとおりです。すべてをレンダリングする直前に、ゲームが一貫した状態 (すべてのオブジェクトが更新を完了) であることを確認することは可能ですか?
qt - Qt & OpenGL:できるだけ頻繁にレンダリングする方法は?
Win32 プロジェクトから Qt プロジェクトに OpenGL アプリケーションを移植しています。
win32 プロジェクトでは、前のフレームが終了するとすぐに次のフレームを実行し続けるメインループしかありませんでした。
Qt と OpenGL について見つけたチュートリアルでは、タイマーを使用してシーンの更新を制御しています。ただし、できるだけ多くのフレームをできるだけ頻繁にレンダリングしたいのですが、どうすればよいですか?
in-app-purchase - アプリ内購入ホールドゲームループ
私の iPhone/iPad ゲーム アプリで、ユーザーが購入/購入ボタンを押すと、アプリ内購入のダイアログが表示され、ゲーム ループ全体が停止します。アプリ内購入の処理中もゲーム ループが更新されることを希望します。
誰かが私に解決策を教えてください、ありがとう
c++ - SDL - c++ の LoopTimer での FPS の問題
私たちは C++ クラス用のゲーム エンジンを作成しており、FPS に若干の問題があることを除けば、ほぼすべての作業が完了しています。設定した速度よりも常に 10 ~ 20% 遅くなりますが、これはバグやコードの悪さによるものなのか、それともそのままなのか疑問に思っています。500+ に設定した場合、上限は 350 になりますが、これは主にコンピューターがそれ以上処理できないことが原因です。50 に設定すると、約 40 ~ 44 になります。
タイマーを処理する LoopTimer クラスの一部を次に示します。
ヘッダ:
CPP ファイル
更新は基本的に、run メソッドの GameManager で呼び出されます。
必要に応じてさらにコードを提供することもできますし、コードを必要とする可能性のある人に喜んで提供することもできます。sdl_net 関数などを含めてかなり多くのことが行われているため、ここにすべてをダンプしても意味がありません。
とにかく、誰かがフレームレートに関する巧妙なヒントを持っていることを願っています.それを改善する方法、別のループタイマー機能、または単にfpsにわずかな損失があるのは普通のことだと言ってください:)
winapi - CPU をスパイクしない Win32 ゲーム ループ
Windows には、CPU をスパイクすることなく、かなり高く安定したフレームレートでコードをトリガーするアプリケーションの例がたくさんあります。
たとえば、WPF/Silverlight/WinRT アプリケーションでこれを行うことができます。ブラウザやメディア プレーヤーも同様です。Win32 アプリケーションから同じ効果を得るには、どのような API 呼び出しを行うのでしょうか?
もちろん、クロック ポーリングは機能しません。CPU の使用率が急上昇するからです。Sleep()
せいぜい50ミリ秒程度の粒度しか得られないためです。
android - openglゲームループでデュアルコアを使用するにはどうすればよいですか?
私の質問は、openglのゲームループ設計についてです。
ゲームループは3つの主要なステップで吐き出すことができると私は信じています
- 入力を受け入れる-ユーザーが画面やシステムアラートなどをクリックした場合に発生する可能性があります。
- ロジックを実行する
- ビューを更新
簡単にするために、ステップ2と3に焦点を当てましょう。
並行して実行したり、1つのステップに混ぜたりするのは間違っていると思います。例を挙げます。
Latsは、ウォーゲームを作成していて、画面上で戦う100人の兵士を描画する必要があると言います。ロジックは、位置を更新し、背景領域を更新してから、結果を描画する必要があります。別の兵士の位置を更新する前に、1人の兵士の描画を開始することはできません。
したがって、この簡単な手順によれば、手順2と3を何らかの方法で同期する必要があり、手順2は手順3の前に実行する必要があることは明らかです。
では、複数のスレッドと複数のプロセスでゲームループを実行する方法を教えてください。opneglはマルチコアを使用していますか?どのように?
編集:マルチスレッドを使用する1つの方法は、ゲームロジックを事前に計算すること、つまりベクトルを使用することです。ただし、ベクトルには2つの大きな欠点があり、使用することはほとんどお勧めできません。
- ベクトルを変更したくない場合もあるので、多くの計算を行い、それらを使用しません。
- ほとんどの場合、ゲームループで60 + FPS witch平均16ミリ秒に到達しようとしています。スレッドの切り替えには何らかの同期が必要です。私が見たところ、単純なHandler.post()でさえ、同期はパフォーマンスに悪影響を及ぼします。 android(他のスレッドで実行するためにキューにタスクを追加するだけ)では、最大3ミリ秒(フレームレート時間の18%)かかる場合があるため、計算にそれより長くかかる場合を除いて、実行しないでください。今のところ、それほど時間がかかるものは見つかりませんでした。
android - lockCanvas メソッドからのゲーム ループで時折スタッター/ラグが発生する
特定の速度でビットマップをスムーズにスクロールしています。私はゲームループでこれをやっています。時折スタッター/ジャンプすることを除いて、約60 fpsで非常にスムーズにスクロールします. これらのジャンプは、1 秒に 1 回から 1 秒に数回発生します。通常、数秒の実行後に開始するか、より頻繁になりますが、これが大きな手がかりであるかどうかはわかりません.
ジャンプの理由は、実行ループの反復に通常の約 2 倍の時間がかかる場合があるためです。そのため、ビットマップはしばらく 1 つの場所にとどまり、その後さらにジャンプして追いつき、一定の速度を維持します。補間を使用して、経過時間に基づいて更新ごとにビットマップの新しい位置を割り出しました。通常よりも長い時間が経過したとき、距離全体を一度に移動するのではなく、いくつかのミニ更新を試みましたが、一時停止したビットマップはまだ非常に目立ちます.
traceview を実行したところ、余分な時間が lockCanvas 内で費やされています。ほとんどの場合、このメソッドには約 10 ミリ秒かかりますが、これらの長いケースでは約 24 ミリ秒かかります。4秒間なぞると、これが7回発生しました。
次のコードでは、実行速度が速い場合は少しスリープさせていますが、実際には違いはありません。コードのその部分を削除しても、問題は解決しません。経過時間に基づいて位置を計算しているだけなので、一定のフレーム レートである必要はありません。
updatePhysics() と doDraw() のコードは少し計算を行いますが、これをできるだけ効率的にしようとしました。基本的に、時間と速度に基づいてビットマップの新しい位置を計算するだけです。ビットマップが 1 つだけあり、毎回再割り当てされるわけではありません。
また、私は自分の surfaceHolder の準備ができていることを確信しているので、準備ができていない surfaceHolder への繰り返しの呼び出しが抑制されているというのは、Google を検索して見つけた一般的な答えではありません。
これを引き起こす可能性のあるアイデアはありますか?私のサーフェス ホルダーは PixelFormat.RGB_565 を使用し、私のビットマップは Bitmap.Config.RGB_565 としてエンコードされます。私はもともと、私が作成した相対レイアウトからビットマップを取得しました。