私は純粋なJavaで単純なゲームを作ろうとしていて、描画に問題が発生しました。私は比較的高いフレームレートを維持しようとしていますが、JFrame.repaint()を強制することはできず、次の利用可能な機会にフレームを再描画する要求にすぎません。その結果、以下のコードのフレームレートはひどいものになります。しかし、(これは奇妙な部分です)私のマウスが動いていないときはひどいと思われます。私のマウスが動いていて、ウィンドウの上を覆っていると、フレームレートは速くて鮮明です。純粋なJavaで高いフレームレートでレンダリングするにはどうすればいいですか
私はさまざまなオンラインの提案を試みましたし、これを行う方法の例をコンパイルしました。マウスがウィンドウの上を移動していないとき、フレームレートが劇的に低下するという同じ問題があるようです。
(それが重要ならば、私は、Linuxを使用してんだ)
任意およびすべてのヘルプははるかに高く評価されます!
import java.awt.*;
import javax.swing.*;
public class Test extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300, 300));
frame.setVisible(true);
frame.getContentPane().add(new Test());
for (int k = 0; k < 1_000_000; k++) {
frame.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(1);
}
}
frame.dispose();
System.exit(0);
}
private int k = 0;
public Test() {
super();
}
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
int height = (int) (((k * 0.01) % 1) * getHeight());
g.drawLine(
0, height,
getWidth(), height
);
k++;
}
}
ご入力ありがとうございました。これはあなたにとって有益な質問です(「ペイント方法であなたの「k」を更新せず、ウォールクロックのベースにしてください)。https://gamedev.stackexchange.com/questions/43347/how-to-handle -frame-rates-and-synchronizing-screen-repaints –
'私のマウスが動いていないときだけひどいと思われます。私のマウスが動いていて、ウィンドウの上が上がっていると、フレームレートは速く、鮮明です。」 - マウスが動いているかどうかにかかわらず、フレームレートは私と同じように見えます。私はWindow 7でJDK8を使用しています。また、コンストラクタでパネルの背景を設定するだけです。バックグラウンドを2回ペイントする必要はありません。 – camickr
簡潔にするために、ちょうどそこにKを入れてください。ゲームははるかに複雑です。私はちょっとしたコードを書いて、レンダリングの更新に関する私の問題を実証しました。しかし、私はgamedevを見てみましょう。ありがとうございました – LeqxLeqx