嗨,我正在阅读 Ian Cinnamon 的《为邪恶天才编程视频游戏》一书。在其中一个项目中,他解释了如何为赛车游戏创建一些动画。我在下面写了一个简单的代码(删除“几乎”所有不必要的东西)。但结果是一样的:闪烁的.
我的问题是,如何通过使用相同的代码(显然几乎没有修改)让它停止闪烁?我的意思不是找到另一种方法(修改整个代码),因为我已经能够使用JLabel、ImageIcon类和 spritesheets 图像文件创建整个游戏。我的观点是在不移除这些形状的情况下解决闪烁问题 [ Rectangle (fillRect & if possible 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
}
}
}
}