0

Java で 2D ゲームを作成していますが、入力イベント (マウス、キーボード) が発生するはずのときに発生しないという問題があります。win2k & XP で期待どおりに動作します。

ゲームなので、メインループがあります

  1. 入力イベントを結合します (さまざまなリスナーがバッファリングされた状態を取り込みます)
  2. シーンを進めます
  3. シーンをレンダリングします
  4. 安定したフレームレートを維持するために必要に応じて待機します (スリープ)
  5. バッファを交換します

シーンのレンダリングは java2D にかなりの負荷をかけます。これは BufferStrategy を使用し、drawImage() の非スケーリング バリアントを集中的に使用します。フレームレートは当面60fps前後で人為的に固定。

マウスまたはキーボードのイベントが発生してから JVM がそれを取得するまでに (場合によっては数秒まで) 遅延があるようです。フレームトークンを含むカスタムイベントを追加し、フレームの最後でそれを待つことでこれをテストしましたが、期待どおりに起動します(-他のすべての以前のイベントが起動した後にのみ起動する必要があります。これは、それがx-windowsであることを示唆しています- to-jdk の問題、jdk 内の内部の問題とは対照的?)

特に奇妙なのは、Java が +19 のナイスで実行されている場合に軽減できることです (優先度が低い...)。また、人口の多いシーンがある場合はさらに悪化するようです.topを実行すると、Xorg(Javaではなく)がCPUの約80%を使用していることがわかります。これは何か関係があると思われます...

また、スレッドの優先度をいじってみましたが、目に見える違いはありません...

私はこれに完全に困惑しています-他の誰かが同様の動作を見たことがありますか? もしそうなら、どのように修正しましたか? 私は間違った木を吠えていますか??

1.6.0 OpenJDK と fedora 11 を実行しています。

冗長で申し訳ありませんが、事前に感謝します!

4

1 に答える 1

1

Xorgを-19に再設定してみました(リアルタイムなので)、問題は解決しました...

JavaがXorgを介して多くのピックスマップをレンダリングすると、X自体がCPUを圧倒するため、スケジューラによってペナルティを受け、イベントを処理する時間がないと推測していますか? 奇妙さ。

于 2009-10-26T09:38:02.693 に答える