[この質問の方が適していると指摘されたため、stackoverflowからこの質問を再投稿します。]
現在、2DゲームエンジンをJavaに移植しています。Stackoverflowでここで指摘されているゲームライブラリのいくつかを調べました。しかし、私が見たものはかなり単純化されており、アルファ透明度のようなものをサポートしているかどうかさえ述べていないため、ロジックをすでに記述しているC ++レンダラーを移植することにしました。
このレンダラーは、タイリングを使用して不要な再レンダリングを回避する純粋なソフトウェアレンダラーです。出力ペインより少し大きい「オフスクリーンバッファー」を作成し、このオフスクリーンバッファーをすべてのフレームの出力にブリットすることで、スクロールパフォーマンスを最適化しました。このようにして、マップ上でピクセルをスクロールしたからといって、タイルを不必要に再描画することを回避できました。
JavaのAWTを使用して実装し、オフスクリーンバッファーに大きなBufferedImageを使用しました。CPU使用率は問題ありません(C ++の約2倍です)が、連続スクロールに奇妙な問題があり、毎秒程度、レンダラーが約0.2秒間遅延します。
私のコードにはこれらの期間に発生するものはなく、オフスクリーンバッファーをメインビューに描画しないとスパイクがなくなるので、Javaが独自の内部最適化を行っていると結論付けることができます。ただし、それが何をするのかわかりません。また、スパイクを取り除くために削除する必要がある自分自身の最適化もわかりません。また、Java AWTは継続的で高FPSのスクロールを考慮して作成されたのではない可能性があり、この目的にはまったく使用できません。
これらのスパイクを取り除く方法はありますか?