老师你好,为什么我的gameframe加上双缓冲的代码之后,运行起来飞机不见了,只显示背景图案。
不加双缓冲的时候除了闪烁问题其他的都正常。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyGameFrame extends Frame {
Image bg=GameUtil.getImage("images/bg.jpg");
Image plane=GameUtil.getImage("images/plane.png");
int count=0;
int planex=100;
@Override
public void paint(Graphics g) { //paint不需要在main方法调用,自动运行
System.out.println("重画次数"+count );
count++;
g.drawImage(plane,planex,100,22,33,null);//飞机位置大小
g.drawImage(bg,0,0,600,600,null);//背景位置大小
planex+=1;//飞机位移
}
public void langFrame(){
setTitle("planeWar");
setSize(Constant.width,Constant.height);
setLocation(400,50);
setVisible(true);
this.addWindowListener(new WindowAdapter() { //增加关闭窗口监听,这样用户可以点击右上角关闭图标,可以关闭游戏程序
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
new paintThread().start(); //启动重画窗口的线程
}
class paintThread extends Thread{//重画方法
@Override
public void run() {
while (true){
repaint();//内部类可以调用外部类的方法
try {
Thread.sleep(50);//1s=1000ms.相当于一秒重画20次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//双缓冲
private Image offScreenImage = null;
public void update(Graphics g) {
if(offScreenImage == null)
offScreenImage = this.createImage(500,500);//这是游戏窗口的宽度和高度
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
public static void main(String[] args) {
MyGameFrame gf=new MyGameFrame();
gf.langFrame();//调用langFrame方法
}
}