我前面也遇到过 有个网上的双缓冲部分是错的 我给你个新的 你把原来双缓冲的部分 去掉 换成我这个
/**
* 增加双缓冲 来缓解图片的闪烁
*/
private Image iBuffer;
private Graphics gBuffer;
public void update(Graphics scr)
{
if(iBuffer==null)
{
iBuffer=createImage(this.getSize().width,this.getSize().height);
gBuffer=iBuffer.getGraphics();
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
scr.drawImage(iBuffer,0,0,this);
} 你把这段代码放在 窗口类中就行了
/**
* 增加双缓冲 来缓解图片的闪烁
*/
private Image iBuffer;
private Graphics gBuffer;
public void update(Graphics scr)
{
if(iBuffer==null)
{
iBuffer=createImage(this.getSize().width,this.getSize().height);
gBuffer=iBuffer.getGraphics();
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
scr.drawImage(iBuffer,0,0,this);
} 你把这段代码放在 窗口类中就行了
我的update方法是按照你的改的。paint方法我是这样写的public void paint(Graphics g){
player.DrawSprite(g,this);
}能再帮我看一看吗?非常感谢!
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;/**
* 将一些公用的代码 组成一个父类
* @author Administrator
*
*/
public class MyFrame extends Frame {
/**
* 游戏窗口
*/
public void launchFrame (){
setSize(Constant.GAME_HIGHT, Constant.GAME_WIDTH);
setLocation(100, 100);
setVisible(true);//默认的的窗口为隐藏的 要将值设置为true 才能变成可视化。
new PaintThread().start();//启动重画窗口的线程
addWindowListener(new WindowAdapter(){//增加窗口监听内部类 @Override
public void windowClosing(WindowEvent e) { //重写windowClosing方法。
System.exit(0);
}
});
}
/**
* 增加双缓冲 来缓解图片的闪烁
*/
private Image iBuffer;
private Graphics gBuffer;
public void update(Graphics scr)
{
if(iBuffer==null)
{
iBuffer=createImage(this.getSize().width,this.getSize().height);
gBuffer=iBuffer.getGraphics();
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
scr.drawImage(iBuffer,0,0,this);
}
/**
* 定义一个重画窗口的类 它是一个内部类
* @author Administrator
*
*/
class PaintThread extends Thread{
public void run(){
while(true){
repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}//1s=1000ms
}
}
}
}你把你原来的 面板类 直接换成我的这个吧 你的呢个 我看着好乱 我的这个我已经成功用过了 你直接换掉看看 效果