問題タブ [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++ - C++QueryPerformanceCounterおよびQueryPerformanceFrequency
ゲームのタイマーを作成しようとしていますが、QueryPerformanceCounterとQueryPerformanceFrequencyについて聞いたことがあります。ゲームループでこれらを使用して時間/fps/ティックを計算する方法を誰かに説明してもらえますか?
xna - WindowsのカスタムXNAゲームループ
通常のGameMicrosoft.Xna.Framework.Gameクラスを使用せずに、Windowsゲームでゲームループ全体を手動で管理する方法を理解しようとしています。
これは、通常のGameクラスを使用すると、ゲームが途切れる原因になるためです。それほど多くはありませんが、ゲームの特定の性質のために、それはまだかなり目に見えます。
さまざまな設定(vsync、fixedtimestep、さまざまなフレームレートなど)を試した後、タイミングを完全に制御できるように独自のゲームクラスを作成してみることにしました。それで問題が解決するかどうかはわかりませんが、少なくともこの方法で完全に制御できます。
基本的に私はする必要があります:
- ゲームウィンドウを設定する
- ループ内:通常どおりすべてのレンダリングを実行してから、結果を画面にフラッシュし、バックバッファーを管理します。
誰もがこれを行う方法を知っていますか?実際には非常に簡単に聞こえますが、その方法に関するドキュメントは見つかりませんでした。
何が間違っているのかわかりませんが、次のコードがあり(テストのためだけに、タイミングは異なる方法で処理されます)、ループはしばらく実行されてから停止します。マウスポインタをウィンドウに渡すと、ループがしばらく実行されます。
「whilePeekMessage」を有効にすると、ループは継続的に実行されますが、スリープは無視され、マウスがウィンドウ上を移動すると停止します。ここで何が起こっているのかわからない...
最適なのは、メインのレンダリングループで次のような単純なことをしたいだけだと思います。
ただし、この場合、ウィンドウは実際には新しいコンテンツで再描画されていないように見えるため、ウィンドウは空白のままです。form.Refresh()を試しましたが、それでもうまくいきません...何かアイデアはありますか?
android - 入力のGameLoopチェック(Android / GlSurfaceView)
スレッドに基本的なゲームループがある場合、次のようになります。
実際に入力をチェックする方法(タッチスクリーンなど)を考えていました。ビュークラスでonTouchEvent()を使用できることはわかっていますが、ゲームループから確認したいと思います。これはどのように行われますか?
ps:GlSurfaceViewでAndroidを使用しています。
android - タイマーとタッチイベント(移動)処理を備えたAndroidゲームのアプローチ
ゲームループとアクティブレンダリング(SurfaceViewとSurfaceHolder.Callbackを使用)を使用してゲームを実行しています。
それを時限イベントやタッチイベント管理と一緒に機能させる方法を考えています。時限イベントは、xxミリ秒ごとに何かが発生し、yyミリ秒ごとに何かが発生するようなものです。タッチ管理は、下、上、移動時にゲームと画面を更新することです。
何度か試してみましたが、どういうわけかぎこちなく、ゲームのパフォーマンスがあまり良くありません。
一方では、古典的なゲームループ(別のスレッド)があります:更新、レンダリング、描画、スリープの実行中
今、私はこれをタイマーループで機能させる方法をよく知りませんでした。私はハンドラーアプローチを使用しました-ハンドラーを拡張するクラスを作成し、handleMessageで実行する必要があることを実行してから、sendMessageDelayedを使用して自分自身を呼び出します。
ゲームの状態を更新するだけです。結果の変更のレンダリングは、gameLoopで行われます。
このアプローチでは、タイマーの更新を妨げずに、ゲームループの更新を同期する必要があります。
そして-これに加えて、私はタッチイベントを処理する必要があります-下、上、そして移動!ここでの私のアプローチは、タイマーの場合と同様に、ゲームの状態を更新し、ループに任せて正しく処理および表示することでした。
私が完全に間違った道を進んでいるのかどうかはわかりませんが、Androdに向かって、「うまくいく」と思ったようにそれを作りました。
たとえば、別のスレッドでゲームループを作成する必要があるかどうかはわかりません。あるフレームレートでのタッチハンドリング(移動)の結果を表示することだと思いました。
反対側では、ループを離れて、タイマーが更新されるたび、およびタッチ処理が行われるたびに描画するように指示することもできますが、これもうまく機能しません。
問題は、この種のゲームの一般的なアプローチは何ですか?(画面に連続的にレンダリングする必要があるタイミングループ/タッチイベント(移動))。
前もって感謝します。
graphics - メイン ゲーム ループでプログラマーが利用できるオプション
どなたか、これら 4 つのトピックのそれぞれについて、少し詳しく教えていただけないでしょうか。何を求めているのか、少し混乱しています。
パッシブ レンダリングとアクティブ レンダリングが何であるか、およびアクティブ レンダリングの使用がゲーム プログラミングにより適していることについて、私は良い考えを持っています。
残りについてはよくわかりません。
メイン ゲーム ループのタイミングは、フレーム レートと、ゲームを現実的な (または少なくともプレイ可能な) レートで実行するために必要なリアルタイムの物理計算に影響を与えるため、コンピュータ ゲームの重要な要素です。このタイミングに影響を与えるプログラミングの問題を読み、プログラマーが利用できるオプションの範囲をカバーするレポートを作成する必要があります。レポートでは、次の見出しを考慮する必要があります。
アクティブ レンダリングとパッシブ レンダリングの違い、およびゲーム プログラムの優先モードの説明。
物理 (またはゲームモデル) の更新段階とグラフィックスの更新段階の間の時間の分割、およびリアルタイムの物理計算を含むゲームにおけるこれらの相対的な重要性の説明と分析。
リアルタイム物理学で精度を達成するためのテクニックと、これを行うために必要になる可能性のあるトレードオフの説明。
グラフィックス更新のフレームレートを望ましいレートに維持するために使用できるプログラミング手法。
multithreading - ゲームループ、ティック、リアルタイムプログラミングに関するいくつかの質問
まず、私はフランス人なので、おおよその英語についてお詫びしたいと思います。私は現在、LWJGL を使用して Java でリアルタイム ゲームを作成しています。ゲーム ループに関していくつか質問があります。
- スレッドでレンダリング ルーチンを実行しています。それは良い考えですか?通常、レンダリング ルーチンはかなり遅く、より重要なワールド更新 (ティック) ルーチンを遅くするべきではありません。したがって、ここでスレッドを使用することは良い考えのように思えます (スレッドを使用することによる複雑さを除いて)。
- 世界の更新ルーチンでは、エンティティのリストを現在の時刻で更新しています。その後、各エンティティは、最後に更新された時刻に対応する独自の deltaTime を計算できます。これは、リスト内のすべてのエンティティを同じ deltaTime で更新する通常の更新ループとは異なります。スレッド化されたレンダリングのため、これは適切に思えました。それは良い考えですか?代わりに 2 番目の方法を使用する必要がありますか? もしそうなら、スレッド化されたレンダリングはまだ必要ですか? その場合、最大 deltaTime を追加する必要がありますか?
- 一般に、最大の deltaTime を持つことは良い考えですか?
御時間ありがとうございます!
android - SurfaceViewのゲームループで適切なFPSを実行できないのはなぜですか?
私は単純なゲームループをまとめました。主に、Javaの本のKiller Game Programmingとこのチュートリアルで、よく見られるテクニックを使用しています。ここ では、バックバッファーを備えた単純なタイミングのゲームループです。
問題は、適切なFPSで画面が再描画されないことです。Motorola Xoomから得られる最高のものは15FPSで、24を目指しています。
バックバッファの半分のサイズの場合、速度がかなり上がるので、問題はXoomの画面の利用に関係している可能性があると推測しています(SurfaceViewのサイズは1280x727です)...さらに他のゲームが見られます同じサイズで完璧に動作します。
テストするデバイスが他にないので、現時点で何をすべきかについて少し行き詰まっています。
私は何を間違っている/行方不明/無知なのですか?
android - ゲーム ループの作成 (スリープ タイム ヘルプ)
このチュートリアルを使用して、ゲーム ループを作成しました。
「一定のゲーム速度に依存する FPS」と記されたセクションには、スリープ コマンドを含むサンプル コードがいくつかあります。
Javaで同等のものをグーグルで検索したところ、
しかし、それはEclipseでエラーを返します
それは一体何を意味するのでしょう。
そしてまた、私は何だろうと思っていました
メソッドには、opengl-es ゲームに含まれる場合があります (つまり、レンダラーが更新された場所と、display_game() でどのようなことが行われるか);
現在、GLSurfaceView および GLSurfaceRenderer 機能を使用するシステムを使用しています
これがチュートリアルのコードの私の適応です
これは GLSurfaceView で呼び出されますが、これを実装するのに適切な場所かどうかはわかりません。
javascript - ゲーム用のキャンバスでの HTML 5 の効率的な描画
キャンバス要素を使用してゲームを開発しようとしています。現在、背景としてタイル (色付きの正方形) を描画しており、このデモに基づいて矢印キーで制御されるヒーローを描いています: http://www.lostdecadegames.com/demos/simple_canvas_game/
ただし、showDungeon() を呼び出して背景を描画すると、デモのようにヒーローの動きが滑らかになりません。問題は、各タイルを 32x32 として描画しているため、Chrome での動きが遅くなっていることだと思います。私ができる提案やコードの最適化はありますか? タイルが 16x16 の場合は動きは問題ありませんが、32x32 のタイルが必要です。CSS を使用してキャンバスのサイズを 2 倍にしたくありません。http://www.html5rocks.com/en/tutorials/casestudies/onslaught.html#toc-pixelated
無関係な問題: 何らかの理由で、render() でヒーローとして緑色の正方形を描画できなかったため、代わりに画像を使用しました。 http://jsfiddle.net/4M5Xz/4/
android - Opengl-esがonDrawFrameを手動で呼び出す
ゲームループを作成していますが、プロセスで遅れていることがわかった場合に「フレームをスキップ」するために、onDrawFrameを(レンダラー内から手動で)呼び出すことができる必要があります。
現在、私はGLSurfaceViewクラスを持っています。
この設定により、onDrawFrameがすべてのティックと呼ばれることを理解しています。
上記の呼び出しをメソッド内に入れて、ゲームループ内から呼び出すことができるようにしましたが、ゲームループの2回目の実行時に、次のメッセージが表示されてクラッシュします。
フレームごとに手動でレンダラーを呼び出す方法はありますか?
ただ電話します
メソッドは正しく機能します。または、openGLを使用するときに、このような方法でレンダラーを制御することはお勧めできません。