こんにちは、Ian Cinnamon 著「悪の天才のためのビデオ ゲームのプログラミング」という本を読んでいます。プロジェクトの 1 つで、彼はレーシング ゲームのアニメーションを作成する方法を説明しています。以下に簡単なコードを書きました(「ほとんど」不要なものをすべて削除しています)。しかし、結果は同じです:ちらつき.
私の質問は、同じコードを使用して(明らかに少し変更して)、ちらつきを止めるにはどうすればよいですか? 私のポイントは、 JLabel、ImageIconクラス、およびスプライトシートの画像ファイルを使用してゲーム全体を作成できるため、別の方法 (コード全体を変更する) を見つけることではありません。私のポイントは、これらの形状を削除せずにちらつきの問題を解決することです [ Rectangle (fillRect & 可能であれば drawImage)]。
ちなみにこれができないと「なんでそんなことするの!?」または「それは不可能です」も良い答えです。(使わないようにしましょう!)
ありがとう!
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class Race extends JFrame {
public static void main(String[] args){
new Race();
}
private Rectangle r1 = new Rectangle(0,0,800,100);
private Rectangle r2 = new Rectangle(0,100,100,400);
Image img = null;
public Race(){
super("Some Title");
setVisible(true);
setSize(800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
URL url= this.getClass().getResource("someImage.png");
img =Toolkit.getDefaultToolkit().getImage(url);
}catch(Exception e){}
Race.GameLoop gameHeart = new Race.GameLoop();
gameHeart.run();
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.GREEN);
g.fillRect(r1.x, r1.y, r1.width, r1.height);
g.setColor(Color.RED);
g.fillRect(r2.x, r2.y, r2.width, r2.height);
g.drawImage(img, r2.x, r2.y, r2.width, r2.height, this);
try {
Thread.sleep(75);
} catch (InterruptedException ex) {}
repaint();
}
public class GameLoop extends Thread {
public void run(){
while(true){
//game animations and logic
//even if I put repaint() here it still flicker
}
}
}
}