問題タブ [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.
scala - ゲームループの機能的代替
私はScalaから始めたばかりで、小さなおもちゃのプログラムを試しています。この場合は、テキストベースのTicTacToeです。私はscalaについて知っていることに基づいて作業バージョンを作成しましたが、それはほとんど必須であり、クラスは変更可能であることに気づきました。
私はいくつかの機能的なイディオムを実行して実装しようとしていますが、少なくともゲームの状態を表すクラスを不変にすることができました。ただし、次のように、可変状態と命令ループに依存するゲームループの実行を担当するクラスが残っています。
このループで必須に行っていることをプログラムするためのより慣用的な方法は何でしょうか?
完全なソースコードはこちらhttps://github.com/whaley/TicTacToe-in-Scala/tree/master/src/main/scala/com/jasonwhaley/tictactoe
java - GUI を更新するとちらつき効果が発生する
私は現在、コンテンツペインでゲームループから毎秒60フレームで画像を描画するJFrameを持っています。これは問題なく動作しますが、コンテンツ ペインの特定の部分を選択するときに情報を表示したい Swing 要素が右側に増えました。その部分は静的 GUI であり、ゲーム ループを使用しません。
私はこのように更新しています:
(このメソッドは、プレーヤーが実際に移動したときにのみ呼び出されるため、1 秒間に 60 回ではなく、1 回だけ呼び出されます)
この update() メソッドをゲーム ループから呼び出すと、ちらつき効果が発生することに気付きました。これは、UI の更新に時間がかかるためだと思いますので、新しいスレッドに入れることにしました。これでちらつきは減りましたが、解決にはなりませんでした。
次に、1 秒間に 60 回再描画される画面の部分の方がはるかに重要であるため、新しいスレッドの優先度を低くすることにしました。これにより、ちらつきが再び減少しましたが、それでも発生しました。次に、Thread.sleep(150);
update() メソッドを呼び出す前に新しいスレッドで使用することにしました。これにより、システムのちらつきが完全に解決されました。
ただし、他のシステムで実行すると、引き続き発生します。以前ほど頻繁ではありませんが (おそらく 20 秒に 1 回)、それでもかなり面倒です。どうやら、別のスレッドで UI を更新するだけでは問題は解決しません。
ちらつきを完全になくす方法はありますか?
iphone - Objective-C での文字列比較とクラス比較
Objective-C のゲームを書いていますが、ゲーム ループ内のコードの最適化を開始する段階に来ています。
私は大量のクラス比較メソッドを使用していますが、
if ([obj isMemberOfClass:[SomeClass クラス]])
この種のチェックは非常にコストが
かかると聞きました。1 つの配列に複数のクラスを設定することだけを選択したため、ある種のクラス チェックが必要です。
おそらく、NSObject をサブクラス化する NSObject にプロパティを追加して、文字列プロパティを含めることを考えていました。初期化中に、その特定のサブクラスのクラス名と等しくなるようにします。次に、単に
if ([obj.klass isEqualTo:@"SomeClass"])
これは有益でしょうか?
ゲームループからできるだけ多くの動的コーディングを排除しようとしています。
ありがとう!
android - アンドロイドゲームループスリープ
私はAndroid用のミニゲームに取り組んでいます。このコードをゲームループに使用しています。
RefreshHandlerクラスは、SnakeViewクラスの例からのものです。
コードは問題なく動作します。新しいゲームボタンのアクティビティがあります。私が最初にアクティビティに入るとき、それは機能します。しかし、ゲームを終了して再び速度を入力すると、速度が速くなります。これは、私にはわからないことです。ゲームを終了し、[新しいゲーム]ボタンを使用して再度入ると、速度はさらに速くなります。
誰かがこれで私を助けることができますか?
android - Android-ゲームループでのonResume後のnullポインター例外
私はアンドロイドゲームに取り組んでいます。私はここと同じ問題に直面していました
待機して、そこに示されているようにすべてのソリューションに通知しようとしましたが、アプリが再開するとすぐにNullポインター例外が発生します。これがログ猫の情報です。
onSurfaceCreatedおよびonSurfaceDestroyed内のコード
GameThreadクラスのコード
}
アクティビティクラスonPause
onResumeでゲームの状態を維持する方法は?ありがとう
android - Android ゲームループ、更新と描画は別々かどうか?
ゲームを作るためにAndroid開発を始めたばかりです。以前にも触れましたが、基本的なことだけを取り上げました。メインループの設定方法が少し混乱しています。私は XNA (C#) を使用しており、分離された更新/描画ループが気に入っています。
典型的なアンドロイドゲームループがどのように機能するのか疑問に思っていましたか? オンラインで検索したところ、次の 2 つの方法が見つかりました。
2 つのメソッドの例として、ゲーム エンティティの更新を見てみましょう。
現在、私はスレッドの経験がまったくないため、XNA が画面の背後で更新/描画ループをどのように行うのかわかりません。しかし、方法 1 を使用すると、すべてのエンティティを 2 回ループ処理する必要があります。1 回目は更新用、もう 1 回は別の描画用です。これによりパフォーマンスが低下するのではないかと心配していますが、オンラインのサンプルでこれを見たことがあります。
私は何かが足りないのでしょうか、それとも正しいのでしょうか?方法 2 はパフォーマンスに関して最も優れていますか?
java - このアプレットゲームループの何が問題になっていますか?
このアプレットは、ウィンドウのサイズが変更されたり最小化されたりした場合にのみ、DRAWSを描画および更新するようです。したがって、アプレットは常に再描画されるわけではなく、ウィンドウを操作する場合にのみ再描画されます。
私はここで何か間違ったことをしていますか?
私はここに提示されたゲームループをフォローしています:http ://www3.ntu.edu.sg/home/ehchua/programming/java/J8d_Game_Framework.html
コードはここにあります:
iphone - NSThread ゲーム ループの作成
NSThread ゲーム ループを作成しようとしていますが、57 FPS を成功させることができたことがあります。
ときどき、私の fps がばかげた数値まで上がることがあります。
私はそれがどのように起こっているのか理解していません。
最後のループからの経過時間を確認し、早すぎる場合はその時間だけスレッドをスリープさせます。
これは常に発生しているわけではありません。速度の if チェックを回避し、ループを高速化することがあります。
どんなコメントでも大いに意味があります。
また、「ティック」する場所はどこですか?
javascript - ゲームループでのメモリリーク
javascript でゲームを作成していますが、ゲームループが 30 ミリ秒ごとに呼び出されます。タスク マネージャーが Firefox のメモリ使用量を約 20 秒で 400 MB 増加させるため、大量のメモリ リークが発生します。javascriptでメモリが確実に収集されるようにする方法に慣れていません。
OK、いくつかのコードをコメントアウトして、問題のある行を見つけました。
ship.ship.rotate(角度); その行をコメントした後、javascript は 4500K を使用しています。これが問題を引き起こしている理由と、このコードなしでオブジェクトを回転させるにはどうすればよいですか?
c# - レンダリングを強制したいのですが、できるだけ速く描画するだけです(InvalidateVisual / CompositionTarget.Rendering)
私はリアルタイムのWPF/Silverlight(および間もなくWP7)視覚化コンポーネントに取り組んでおり、ゲームループスタイルでコンポーネント全体を強制的に再描画するための最良のソリューションを探しています。再描画はオンデマンドである必要がありますが、再描画呼び出しでメッセージポンプをバックアップしたくありません。コンポーネントの描画のほとんどは、非WPFプリミティブ(Bitmap Interop、Direct2Dなど)を使用して行われるため、コードはInvalidateVisualを使用せず、その結果、現在は次のようになります。
さて、これは素晴らしいです。InvalidateElementを何度も呼び出すと、応答性が良くなります。ただし、私がやりたいのは、データを視覚化コンポーネントにできるだけ速くプッシュできるようにすることですが、コンポーネントが描画できる場合にのみ描画し、入力ストリームが完了した後はデータに追いつくために描画を続けないようにします。
いいえ、OnRenderをオーバーライドできません。WPF内で非WPF描画を使用しています;-)
基本的に私が欲しいのは、WindowsFormsの古いInvalidate()/ OnPaintのようなもの、さらにはDirectXのゲームループのようなものです。
現時点では、データを視覚化コンポーネントに高速でプッシュする外部スレッドがある場合、データのプッシュを停止すると、コンポーネントの描画が停止する前に、さらに20秒分の更新が行われるという状況になります。データが入ったらすぐに描画をやめたいです。
私が持っていたもう1つのアイデアは、視覚化コンポーネントでCompositionTarget.Renderingを処理してから、データをプッシュするためのある種の基本的なキューを実装し、Renderingイベントがこのデータをできるだけ速く消費することでした。
要約すれば
WPF視覚化コンポーネントVと、1msごとにデータをプッシュするデータソースDがある場合、Dのデータレートに関係なく、Vが30FPS(またはそれが実行できるもの)でデータを描画し、チャンクで更新することをどのように確認できますか? DirectXでゲームレンダリングループがどのように機能するのでしょうか。
データが停止すると、Vはこれまでのすべてを一度に再描画する必要があります。データが速すぎる場合、Vはそれを補うために一度に大きなチャンクを描画します。
さらに情報が必要な場合は、喜んで共有させていただきます。今、私は簡単な修正があるかどうかを判断するための概要を投稿しましたが、コード例を含むより完全なQをリクエストに応じて提供できます。
よろしくお願いします、