問題タブ [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.
android - スレッドの一時停止-HistoryRecordのアクティビティ一時停止タイムアウト
Androidでゲームエンジンを書こうとしていますが、スレッドにあまり詳しくありません。
私のスレッドには、描画先のサーフェスを保持する属性mSurfaceHolderがあります。私のスレッドのrun()メソッドは次のようになります。
STATE_RUNNING
アクティビティがフォアグラウンドにあり、ゲームが実行されている必要があるときの状態を表します。
STATE_PAUSED
別のアクティビティが前面に出たときの状態を表します。一時停止している間も描画する必要がある理由は完全にはわかりませんが、LunarLanderの例から収集したようです。
私が望んでいるのは、アクティビティを見ている間、ゲームが更新されて描画されることです(LogCatを使用してテストします)。そして、ホーム画面に戻るか、別のアクティビティが上に表示されると、描画されます。
アクティビティを見ている間は描画と更新が行われるので、ゲームループ自体は機能します。しかし、私が活動を離れるとき、それは効果がありません。アクティビティのonPause()から呼び出されるスレッドのpause()メソッドは次のとおりです。
ご覧のとおり、このメソッドをテストするために、いくつかのメッセージをログに記録しました。アクティビティを離れたときに見つけたのは、「ここ」はログに記録されていますが、「そこ」はログに記録されていないということです。スレッドに関する知識が限られているので(実際に何が行われるかはほとんどわかりsynchronized
ません)、スレッドがサーフェスホルダーと同期できないため、これが発生すると思います。しかし、なぜ同期しないのかわかりません。アクティビティを終了してから数秒後、LogCatに次の警告が表示されます。
Activity pause timeout for HistoryRecord
なぜこれが起こるのか考えていますか?アクティビティを再開しようとしても問題はありません。スレッドはそのまま実行され続けます。
どうもありがとうございました。
編集:ちょうど何か他のものを発見しました。アクティビティを開始してから約1秒以内にアクティビティを終了すると、スレッドは正常に一時停止します。そして、同じタスクがまだ実行されている間、問題なく再開および一時停止します。なぜ短期間でうまくいくのかわかりませんが、長すぎるとうまくいきません。
編集2:わかりました...私はそれを修正しました。しかし、私は自分がやったことをやるべきではないと思います。mSurfaceHolder
基本的に、pause()メソッドとsetState()メソッド(pause()で使用される)の両方から同期を削除しました。いいえ、想定どおりに機能しますが、同期が必要な理由があると思います。
おそらく私が尋ねる最良の質問はこれです:同期されたブロックを使用してスレッドをオブジェクトと同期する必要があるのはいつですか?この場合、SurfaceHolderと同期する目的は何ですか?
iphone - 古いiPhoneだけでなく、新しいiPhoneでも一貫した速度を得るにはどうすればよいですか?
iPhone用のOpenGL ESで2Dゲームを作成中です。繰り返しを「NO」に設定して、0.002 (60 fps) の間隔で NSTimer を使用してゲーム ループを呼び出しています (推奨どおりに関数内から NSTimer を再度実行しています)。
これは私の 3GS ではスムーズに動作しますが、2G でこれをテストすると、ゲームの動作が非常に遅くなり、時折空白のフレームが表示されることがあります。間隔を 0.033 (30 fps) に下げると。3Gでは遅すぎる。
両方のデバイスで一貫した再生を得るには何らかの方法が必要であることはわかっています。Doodle Jump は、両方のスマートフォンでスムーズに同じフレームレートで実行されているようです。
iphone - iPhoneデッキゲームループ
UnoやHerats(デッキゲーム)のようなゲームループを実行するための最良のアプローチを誰でも教えてもらえますか
iphone - iPhoneゲームループハイブリッド
重力や加速などの基本的な物理機能を必要とするこれらの小さなスプライトを実装する必要があるアプリのアイデアを思いついたので、当然、iPhoneのゲームループを調べました。これにはたくさんのスレッドがありました。 、しかし私が理解しようとしているのは、これらのスプライトを作成し、ゲームループを使用して自然に動作させながら、完全な「標準」のiPhoneインタラクション、つまりタッチ、ピンチ、スワイプ、コアアニメーション、コアを使用できるようにすることです。データなど...
これは、バックグラウンドスレッドでゲームループを実装し、そのスレッドでスプライトを更新してから、メインUIスレッドで標準操作を実行するのと同じくらい簡単ですか(もちろん、明らかなバックグラウンドタスクを除く)?
可能であれば、この種のことの一般的な概要を教えてください。
c++ - マルチスレッドゲームサーバーの基本設計?
マルチスレッド ゲーム サーバーはどのように作成されますか?
スレッドが 4 つある場合、ゲーム ループを実行するスレッドが 1 つと、リクエストを受け入れて処理するスレッドが 3 つあるでしょうか? また、ゲーム ループを実行しているスレッドから情報が送信されますか?
animation - フレーム レートを制限すると、オブジェクトの動きが途切れる
ゲーム内のオブジェクトの動きが途切れるという問題が発生しています。
フレーム レートが制限されていない場合、ゲームはスムーズに実行されます。
フレーム レートを 60 fps に制限すると、動きが途切れ途切れになります。
オブジェクトの動きはこんな感じ…
速度は 1 秒あたりのピクセル数で、GetFrameTime() は最後のフレームからの経過時間を返します。オブジェクトは x 方向と y 方向にのみ移動することに注意してください。
私はSFMLを使用しており、関数SetFramerateLimit(60)
とUseVerticalSync(true)
. 途切れ途切れの動きの問題に対処しようとしているときに、XNA 開発者からの記事を読みました。1 回更新して 1 回レンダリングし、ゲーム ループの残り時間がフレーム レート (つまり 1/60) 未満の場合は、残りの期間は寝ます。これらの機能を無効にしてその動作を記述したところ、同じ症状が発生したため、これが SFML の動作だと思います。
今、私は上記のアプローチが悪いことだと言っているのではありません。実際、アプリケーションが不必要な作業を行っていない点が気に入っています (フレーム制限を設定してアプリケーションを実行する場合とフレーム制限を設定しないでアプリケーションを実行する場合では、リソースの使用量に顕著な違いがあります)。しかし、なぜ動きが途切れ途切れなのか、私にはよくわかりません。gafferongames の記事を読みましたが、ここには当てはまらないようです。
任意の支援をいただければ幸いです。
編集:問題を特定しましたが、解決方法がわかりません。
オブジェクトが「ジャンプ」するフレームでは、m_distance は他のフレームの距離よりも大幅に大きくなります。よく調べてみると、GetFrameTime() もフレーム間の以前の時間よりも大幅に大きくなっています (有意差は 2 ~ 3 ミリ秒のようです)。
Edit2: http://gafferongames.com/game-physics/fix-your-timestep/のおかげで解決策を思いついたと思います。GetFrameTime を使用する代わりに、固定のデルタ時間を設定します。
c - これは FPS に依存しないゲーム ループの適切な実装ですか?
私は現在、物理ベースのゲーム用の FPS に依存しないゲーム ループの次の実装に近いものを持っています。私がテストしたほぼすべてのコンピューターで非常にうまく機能し、フレームレートが低下してもゲーム速度を一定に保ちます. しかし、私は組み込みデバイスに移植する予定であり、ビデオでより苦労する可能性が高く、それでもマスタードをカットできるかどうか疑問に思っています.
編集:
この質問では、msecs() が、プログラムの実行にかかった時間をミリ秒単位で返すと仮定します。ミリ秒の実装は、プラットフォームによって異なります。このループも、異なるプラットフォームでは異なる方法で実行されます。
java - Android ゲームでメイン ゲーム ループを配置する場所
OpenGL を使用して、Android でゲームのスケルトンを作成しようとしています。メインのゲーム ループ コードをどこに配置すればよいですか?
これまでのところ、私の最良の候補は Renderer.onDrawFrame(...) メソッドで、これはフレームごとに呼び出されるようです。そのため、コードは次のようになります。
より良いアプローチはありますか?私はこれが嫌いです。1) Android がレンダリングすることを期待している場所で、更新とレンダリングを混在させる必要があり、2) このメソッドは別の「レンダリング スレッド」から呼び出されているように見え、ゲームの複雑さが増します。
php - PHP: ゲーム ループ (スレッドまたは並べ替え)
ゲームクライアントとなるPHPコードを書いています。ソケットを使用します。socket_create、socket_connect、socket_read の順に続きます。問題なく動作しますが、問題はサーバーがいつでもパケットを送信できることです。つまり、socket_read は「ゲーム ループ」で常に発生する必要があります。だから、このようなもの:
ループに陥っており (クライアントがゲームを終了するまでサーバーは接続を終了しない)、受信したパケットを PHP コードで処理する必要があるため、機能しません。
したがって、PHP には実際にはスレッドがありません。これを処理する最良の方法は何ですか?
iphone - タッチがトリガーされていません!
OK、前の質問は詳細ではなかったと思います。詳細をお伝えしています。
完全なソース コードを投稿する前に、質問する必要があります。以前の iOS SDK では機能していました。現在の xcode のバージョンは 3.2.5 です
1 つのコメント: 次のコードを iPad シミュレーターに対して実行すると、すべてのタッチが呼び出されます。そのため、iPhone シミュレーターと実際のデバイスが問題に応答しないのは非常に奇妙です。
main.m
AppDelegate.h
AppDelegate.mm
GLView.h
GLView.mm
これは単なるテストケースです。私の主な関心事は、なぜ新しい SDK で touches が呼び出されないのかということです。NSTimer やその他のタイマーを使用する必要があるとは言わないでください。新しい SDK をインストールする前に作業を行いました。それ以外に、そのソースコードに問題がある人がいるかどうか疑問に思っています。
ありがとう、メンフィス