import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TankClient extends Frame{ public final static int GAME_WIDTH=800; public final static int GAME_HEIGHT=600; Image offScreenImage=null;
int x=30,y=30; public void paint(Graphics g) { Color c=g.getColor(); g.setColor(Color.RED); g.fillOval(x,y,50,50); g.setColor(c);
y=y+10; } //双缓冲 public void update(Graphics g) { if(offScreenImage==null){ offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT); } Graphics gOffScreen=offScreenImage.getGraphics(); Color c=gOffScreen.getColor(); gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage,0,0,null); } public void lauchFrame(){ this.setLocation(0,0); this.setSize(GAME_WIDTH,GAME_HEIGHT); this.setTitle("TankWar"); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); }
先声明个Graphics,把图片画在这个Graphics上面
再把这个Graphics刷回屏幕的Graphics
g2d.setRenderingHints(new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON));
g2d.draw...如果不是抗锯齿就参看RenderingHints的API添加其他的renderhints试试
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TankClient extends Frame{
public final static int GAME_WIDTH=800;
public final static int GAME_HEIGHT=600;
Image offScreenImage=null;
int x=30,y=30;
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.RED);
g.fillOval(x,y,50,50);
g.setColor(c);
y=y+10;
}
//双缓冲
public void update(Graphics g) {
if(offScreenImage==null){
offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
}
Graphics gOffScreen=offScreenImage.getGraphics();
Color c=gOffScreen.getColor();
gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage,0,0,null);
}
public void lauchFrame(){
this.setLocation(0,0);
this.setSize(GAME_WIDTH,GAME_HEIGHT);
this.setTitle("TankWar");
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
this.setBackground(Color.GREEN);
setVisible(true);
new Thread(new paintThread()).start();
}
private class paintThread implements Runnable{
public void run() {
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
TankClient tc=new TankClient();
tc.lauchFrame();
}}
public void update(Graphics g){
Dimension size=getSize();
if(doubleBuffer.getWidth(this)!=size.width||doubleBuffer.getHeight(this)!=size.height)
{ doubleBuffer=createImage(size.width,size.height);
}
if(doubleBuffer!=null){
//绘制到双缓存区
Graphics g2=doubleBuffer.getGraphics();
paint(g2);
g2.dispose();
//将双缓存复制到屏幕
g.drawImage(doubleBuffer,0,0,null);
}
else
{//不要双缓存,只绘制屏幕
paint(g);
}
}
public void paint(Graphics g){
//在此绘图
}