Google 検索から、この質問が多く聞かれることがわかりますが、私が見つけた解決策のどれも私のためにそれを行っていません. 私は画像を使って Java でゲームを作っています。しかし、フォーム全体が絶えずちらつき、止められません。はい、私はそれを二重にバッファリングし、update() メソッドをオーバーライドしました。これは確かに役に立ちましたが、ちらつきはまだ残っています。ダブルバッファリングで何か間違ったことをしているのか、それともまったく別のものが必要なのかはわかりません。
最初は clearRect() の行に何か関係があるのではないかと思っていましたが、それを削除してもゲームはまだちらつきましたが、もちろん毎回クリアされませんでした。それで、それはまったく役に立ちませんでした。タイマーを遅くすると、ちらつきはほぼ完全になくなりますが、100ms まで遅くする必要がありますが、それでもまだちらつきが発生します。その上、それは単にゲームには遅すぎる. 1 つのタイマーで 10 ミリ秒のタイマーですべてを実行し、別のタイマーで 100 ミリ秒のペイントを実行しようとしましたが、その場合は不安定に見えます。ちらつきはまだ問題ですが、ペイント タイマーを約 30 ミリ秒まで遅くしても滑らかなままです。
ちらつきなしで 10 ~ 30 ミリ秒ごとにこれを行う方法が必要です。ダブルバッファリングに似ているが、この場合により良い他の方法、または私が使用できる方法はありますか? 助けてくれてありがとう。
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);
}