Google検索でこの質問に多くの質問が出るのがわかりますが、私が見つけた解決策はありません。私は画像でJavaでゲームを作っています。ゲームには一般的にそのようなものがあるからです。しかし、フォーム全体が絶えずちらつき、私はそれを止めることができません。はい、私はそれをダブルバッファリングし、update()メソッドをオーバーライドし、間違いなく助けている間、ちらつきは依然として続きます。ダブルバッファリングで何か問題が起きているのか、まったく違うものが必要なのか分かりません。Java Image Flickering
最初はclearRect()行と関係があったかもしれませんが、それを削除するとゲームはまだちらつきましたが、もちろん毎回クリアされませんでした。それは全く助けにならなかった。タイマーを遅くすると、ちらつきがほとんど完全に消えてしまいますが、100msまで遅くする必要がありますが、それでもちらつきが残っています。しかも、それは単にゲームにとっては遅すぎるだけです。私は1つのタイマーを10msのタイマーですべてをやってみましたが、ペイントのために100msで別のタイマーを使っていましたが、ちょっと変わったようです。ペイントタイマーは約30msまで遅くしても滑らかになりますが、ちらつきは依然として問題です。
これをちらつきなく10〜30msごとに行う方法が必要です。ダブルバッファリングに似たいくつかの他の方法がありますか?この場合、または私が使用できる何かが良いでしょうか?助けを前にありがとう。あなたはすべてのダブルバッファリングとすべてのSwingグッズを失うよう
public class main extends JApplet implements ActionListener {
//This Declares The Variables
Graphics2D buffer;
Image offscreen;
Timer timGame = new Timer(10, this);
//other variables
public void init(){
//This Creates The Offscreen Buffer Zone
offscreen = createImage(getSize().width, getSize().height);
buffer = (Graphics2D)offscreen.getGraphics();
//other initialization stuff irrelevant to drawing
}
public void actionPerformed(ActionEvent evt){
if (evt.getSource() == timGame)
runGame();
}
private void runGame(){
//Do stuff, move objects
repaint();
}
public void paint(Graphics g){
super.paint(g);
buffer.clearRect(0, 0, getSize().width, getSize().height);
//draw stuff to buffer
g.drawImage(offscreen, 0, 0, this);
}
public void update(Graphics gr){
paint(gr);
}
可能重複[JAppletの - にsuper.paint()。フリッカーが発生する](http://stackoverflow.com/questions/7004866/japplet-super-paint-causes-flicker) –
[vsync tearing](http://en.wikipedia.org/wiki/Screen_tearing)が表示されますかすぐに_画面を更新しようとしていますか? 60 Hzのリフレッシュレートはフレームあたり約17ミリ秒になります。 – sarnold
super.paint()ラインをクリアすると問題が解決しました。私はそれがそれのような何か愚かであることを知っていた。私はそれが普通に絵を描くために得たものだと思って、後でそれを倍増させるために戻ってきます。私はPaintComponentも見ていきますが、私は現時点でそれを見て少し忙しいです。うまくいけばそれはあまりにも助けることができる、少なくとも今はちらつきが完全に停止している。私は10msにもタイマーをバンプアップすることができます:)ありがとう。 – Doug