Java Swing を使用してゲームを作成していますが、ゲームを実行してから 10 分ほど経過すると、グラフィックが大幅に遅れることに気付きました。ゲーム ループは、一定の FPS で実行されていると報告しています。
現在、ゲームループが発生すると再描画も呼び出されるようにしています。グラフィックを同期しないと、描画されるさまざまな部分が非常に遅くなり、画面に表示されます。タスク マネージャーは、使用するメモリはほぼ同じであることを示していますが、CPU 使用率は時間の経過とともに徐々に増加します。推測する必要があるとすれば、正しく描画するために Swing を使用していないということです。
私が現在描画に使用しているプロセスは次のようなものです。
- Graphics2D オブジェクトをキャストする
- スーパー ペイント グラフィックス オブジェクト
- すべてのオブジェクトは、そのグラフィック オブジェクトを使用してグラフィックを描画します。
- ツールキットの同期
- グラフィックを破棄する
パネルはsetDoubleBuffered(true)
.
何が間違っているのでしょうか?
編集:
SSCCE を遅延させることができなかったので、戻って各描画関数を再テストしたところ、
int ilen = drawActorQueue.size();
for (int i = 0; i < ilen; i++)
{
GameActor oo = drawActorQueue.get(i);
oo.draw(g2d, viewX, viewY);
}
問題を引き起こしているようです。
drawActorQueue には実際には 2 種類のオブジェクトへのポインターが含まれており、GameActor は単なる基本クラスであるためだと思います。
これは当てはまりますか?インターフェイスを使用するか、リストを代わりに2つの子オブジェクトの特定の配列を指すようにすることで修正できると思います。
編集: !@#$%^ 信じられないほど愚かで、リストをクリアしていないのは私だけでした。再び疲れ果てたときは、コーディングやデバッグを行うことはありません。